Add port allocator and move ipset into orderedintset

Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
Remove std sort and use custom sort for performances

Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes <guillaume.charmes@docker.com> (github: creack)
Refactor to support multiple ip addresses

Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
Simplify logic for registering ports

Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
Fix issues from rebase on master

Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
Release the push lock at the end

Docker-DCO-1.1-Signed-off-by: Abel Muiño <amuino@gmail.com> (github: amuino)
Fix for issue #3786

This is a fix for the case that one mount is inside another mount and
docker can't then delete the resulting container.

Docker-DCO-1.1-Signed-off-by: Peter Waller <p@pwaller.net> (github: pwaller)
Merge pull request #3790 from crosbymichael/move-port-allocators

Move port allocators into network driver
Merge pull request #3784 from 1uptalent/3783_release_push_lock

FIX #3783: Release the push lock after the image push is completed
Merge pull request #3787 from pwaller/issue-3786

Fix for issue #3786 `docker rm` unmounts in the wrong order