Factor back-end attribute checking into the back end. (#80)

Factor back-end attribute checking into the back end.

This change splits up `front_end/attribute_checker.py`, moving the
generic parts to a new file `util/attribute_util.py`, and moving the
back-end-specific parts to `back_end/cpp/header_generator.py`.

Some tests from `front_end/attribute_checker_test.py` were moved to
a new test suite, `header_generator_test.py`.  There should probably
be a `util/attribute_checker_test.py`, but for now the old tests
provide sufficient coverage.

As a result of moving some attribute checking into the back end,
`generate_header()` can now return errors.  A future change should
convert some of the `assert` statements in the same file into error
returns.

In order for the `emboss_codegen_cpp.py` driver to properly display
errors, the original source code of the `.emb` is now included
verbatim in the IR, increasing the IR size by about 3%.

This change does still enforce some minimal checking of back end
attributes: the back end must be listed in the new
`[expected_back_ends]` attribute (default value `"cpp"`), or it is
considered to be an error.  This change does not document the
`[expected_back_ends]` attribute because it is not currently useful for
end users.
diff --git a/compiler/util/BUILD b/compiler/util/BUILD
index 92f4cde..c9ec128 100644
--- a/compiler/util/BUILD
+++ b/compiler/util/BUILD
@@ -47,8 +47,19 @@
     python_version = "PY3",
     deps = [
         ":expression_parser",
-        ":ir_util",
         ":ir_pb2",
+        ":ir_util",
+    ],
+)
+
+py_library(
+    name = "attribute_util",
+    srcs = ["attribute_util.py"],
+    deps = [
+        ":error",
+        ":ir_pb2",
+        ":ir_util",
+        ":traverse_ir",
     ],
 )