Add width inference to sim-chisel

The general idea behind this is that I need to match the widths of the
simulator's output with Chisel's C++ output.  As the DREAMER backend
doesn't emit the width of every node, I need to do some width
inference here.

My width inference algorithm is very simple.  Essentially I have a
single rule: the width of all nodes in a single DREAMER node must be
exactly the same.  This rule allows me to do width inference for some
simple cases, but I think it may be too strong for some designs (for
example: what happens if you want to truncate or extend a signal?).
Use "::" instead of "__" as a path seperator

This mirrors a change I just made to the Chisel Flo backend.
Essentially this allows me to properly demangle names -- the old
version doesn't work at all where there's more than a single module in
the hierarchy.