Now tracks static and dynamic port allocations.

Ports are allocated for each instance created as an atomic unit.  If any
allocation fails then instance creation fails.  This is also true for
instance recovery upon restart.

Closes #89. Fixes #57. Fixes #59.