domain: WIP do some cleanup

Domain#bind() shoved in too much. This helps break things out so I'll be
able to see what's going on.

The re-write of domains won't happen for a while, but this is a start.
It'll be rebased with other similar work.
WIP: integrate with WeakObject