Implement connection.Write

Clients should use this method to write out any data.
Export Message type and fields

This is so that it's possible to build messages in the client's code
WIP: Implement client.Discover()

This function needs to write out a DeviceGetPanGateway payload and then wait for a response to come back within 5 seconds (probably in some sort of goroutine)
Ensure connection is established when calling client.New()

Having this code run in a goroutine means that it is possible to attempt to call a connection method before a connection is established. Since we need a connection established before we realistically do anything else, we should do the connecting synchronously.

(It's pretty quick, so NBD)