Works with first commit of dev branch of jackhammer
Initial width separation version

Move width into its own class.
Add debugging output.
Cleanup definitions

Hide Width class behind Node methods
Clean up; just ignore negative inferencese (don't set them)
Update fromNode to clone Width
Add debugging output and assertions
Fix tutorial Adder4 failure due to unmasked literal comparison.

Currently, literal values are allowed to overflow their width, so
comparing widths isn't sufficient to determine if we can use a literal
value directly during bit extraction. We need to also verify that the
literal value doesn't overflow the width. It may be more appropriate
to fix this elsewhere, but that requires a little more understanding
(and research) about "width" management.
Remove debugging output.
Minor code changes - need debugging

Remove references to node.
Comment out "clone" methods.
Removed implicit def toInt().
Add preliminary binaryOp method.
Enable width cloning

We do need to deep copy the Width object.
Remove some explicit "width == -1" tests for unknown width

Add methods Node.isKnownWidth and Width.isKnown to prepare for moving
to Option[Int] type for Width (and away from explicit value of -1).
Restrict access to basic Width implementation.

Try to remove external comparisons against > 0 for widths.
Parameterize internal width representation.
Switch to Option[Int] for width values

Use Option[Int] for width values so we can better represent unknown widths.
Code cleanup.

Add comments; minor code motion.
Fix compile errors; new width references.
Initial transition to Width class - integrate with master.
Use by-name to avoid evaluating inferWidth functions early.
Update width inference functions; width.toString

Various width inference functions are missing, add suitable
candidates.
Move code around to facilitate debugging (setting breakpoints).
Width cleanup

Move debug Booleans into call object.
Provide equality trio.