Add support for InetSocketAddress

Supports serialization and deserialization of `InetSocketAddress`.

For serialization:

    * When available, the hostname will be preferred over the IP
    address.
    * When serializing an IPv6 address, it will be surrounded by
    brackets to disambiguate the address from the port,

        e.g. `[2001:db8:85a3:8d3:1319:8a2e:370:7348]:443`

For deserialization:

    * When a port is present, IPv6 addresses must be bracketed
    (as above) in order to discern the address from the port.
    * When no port is present, IPv6 addresses may be unbracketed.
    * Addresses are optionally followed by a colon and a port number.
Merge branch 'master' into feature/inet-socket-address
Merge pull request #247 from nicktelford/feature/inet-socket-address

Add support for InetSocketAddress