Ports

Fixes hacky method of creating ports.  Ports are now chosen randomly from a range, and the port allocator first checks to see if those ports are free before marking them as in use.  When containers are destroyed allocated ports are returned to the range.  This is the core change to address Issue #57 and Issue #59.  Fixing these correctly will also require doing much of the the work for fixing #44 and #54.

@peterbourgon @ohm 
If this struct is only used in `package main`, please un-export it and its methods.