This huge module handles the loading and name resolution. The
loadProto command recursively gets all the imported proto files.
The makeNameMaps command makes the translator from proto name to
Haskell name. Many possible errors in the proto data are caught
and reported by these operations.

hprotoc will actually resolve more unqualified imported names than Google's protoc which requires
more qualified names. I do not have the obsessive nature to fix this.

By construction Env is 0 or more Local Entity namespaces followed
by 1 or more Global TopLevel namespaces (self and imported files).
Entities in first Global TopLevel namespace can refer to each other
and to Entities in the list of directly imported TopLevel namespaces only.

TopLevel corresponds to all items defined in a .proto file. This
includes the FileOptions since this will be consulted when
generating the Haskell module names, and the imported files are only
known through their TopLevel data.