Change common_buf to an OrderedDict to allow dependency ordering

* Introduce an ExprUnit type for grouping together expressions
  (e.g., enums), specifying dependencies, and maintaining
  wrapped/output status
* Removed cache_wrapped (subsumed above)
* empty_structs is now a Set

* Type declarations, enums, and typealiases are stored in the
  common_buf, along with dependency information.
* All enum Exprs are grouped together in the same ExprUnit
* For other Exprs, there is one ExprUnit per Expr
* Before outputting, the common_buf OrderedDict is dumped to an
  array with dependencies properly ordered.  (Circular
  dependecies are implicitly detected, but remain.)

* Function declarations are wrapped as before (in an array)
Merge pull request #98 from ihnorton/kms/type_ordering

RFC: add type dependency ordering