Validate port sets

Allocate ports, both statically specified and dynamically allocated, in discrete sets.  If any individual allocation fails then the entire allocation fails without any effects. 

This addresses issue #57 and issue #59.  It also fixes potential race/deadlock issues with container allocation related to port allocation.

Can we hint at the behavior through semantics? That is, can it be `setUnionInto(dst, src map[uint16]struct{})`