Introduce PortBinding and HostPort for creating port bindings

The Map<ExposedPort, Binding[]> notion used in Port.getBindings() groups
several individual bindings by ExposedPort. This makes it quite
cumbersome to create bindings.
The new abstraction aims to make port binding creation more intuitive
and similar to the processes used in the Docker CLI and in the other
withXXX(XXX...) methods of the command builders.
Parser for HostPort
Check for trailing separators when parsing