Preserve top-level IOs of top module.
Produce same console output as master.
Merge pull request #217 from ucb-bar/preserve_ios

Preserve top-level module IOs in C++ backend output
Improve OHToUInt performance
Make Op type immutable
Support wide division in C++ (slowly)

This also cleans up the emulator a bit.
Support more cases of in-place subword updates
Add per-module stats to --reportDims
Fix init_mapping_table compile time
Support an Op-lowering pass

Backends should implement performance-critical Ops directly, but might prefer
not to implement others directly and instead express them in terms of other
Ops.  Lowering provides a mechanism for this.  As an example, I implemented
PriorityEncoder, OHToUInt, and Log2 directly in the C++ backend, where
a count-leading-zeros/count-trailing-zeros instruction provide good speedup,
but I provide a generic lowering so Verilog and Flo need not implement them.
Improve C++ code generation
Support sparse ROMs

These are useful both for speeding up combinational logic in C++ and for
attaining better synthesis QoR.
Provide better non-GNU priority encoder implementation
Fix width inference for PriorityEncoder etc.
merge master