Refactor := implementation

This removes code duplication and fixes two type system bugs.

  Bool() := foo
    and
  Bool().asInstanceOf[UInt] := foo

behaved differently from each other, which is obviously bad news, and

Bool() := UInt()

failed to compile because it was ambiguous which := definition to use.