pw_kvs: Split out aligned write functionality

- Define the Output interface.
- Create AlignedWriter class, which handles writing aligned and padded
  data to a buffer.
- Define AlignedWriterBuffer, which provides a buffer to an
  AlignedWriter.

Change-Id: I791c5fc2d47617b0866fa779a506cb977905f245
diff --git a/pw_kvs/BUILD b/pw_kvs/BUILD
index b5db383..a059c7b 100644
--- a/pw_kvs/BUILD
+++ b/pw_kvs/BUILD
@@ -25,6 +25,7 @@
 pw_cc_library(
     name = "pw_kvs",
     srcs = [
+        "alignment.cc",
         "checksum.cc",
         "flash_memory.cc",
         "format.cc",
@@ -33,10 +34,12 @@
         "pw_kvs_private/macros.h",
     ],
     hdrs = [
+        "public/pw_kvs/alignment.h",
         "public/pw_kvs/checksum.h",
         "public/pw_kvs/crc16_checksum.h",
         "public/pw_kvs/flash_memory.h",
         "public/pw_kvs/key_value_store.h",
+        "public/pw_kvs/output.h",
     ],
     includes = ["public"],
     deps = [
@@ -71,6 +74,16 @@
 )
 
 pw_cc_test(
+    name = "alignment_test",
+    srcs = [
+        "alignment_test.cc",
+    ],
+    deps = [
+        ":pw_kvs",
+    ],
+)
+
+pw_cc_test(
     name = "checksum_test",
     srcs = ["checksum_test.cc"],
     deps = [