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 
I think about uintX types as bit types.  Bit masking seems like the simplest and most understandable approach to seeing if there are bits above the first sixteen.