Added connection.go to maintain a connection to the specified gateway.

Descriptions of the major components:

func (c *Connection) Connect(sendingErrors chan<- *PushNotificationError) error
  1. It establishes a TLS connection to the gateway it was given in the
     NewConnection function
  2. It sets its state to running
  3. It starts up a go routine (responseListener function) to listen for errors
     that are reported by the gateway. When a response is received, a
     PushNotificationError object is sent on the errorChannel to indicate
     which notification caused the error. If other errors occur, they are also
     sent on the sendingErrors channel and the TLS connection is closed and the
     state is set not running.
  4. It starts up a go routine (notificationSender function) to listen for
     PushNotification objects to be sent.

func (c *Connection) responseListener()
  First it sets timeout for 5 minutes from the current time and tries to read
  from the TLS connection which will block the go routine. Two things will
  unblock the go routine:
    1. The read is successful, which means that the last send of a notification
       failed. The response is reported on the errorChannel.
    2. The timeout expires. In this case it just resets the timeout and tries to
       read again.

  Any other errors are reported on the errorChannel and the TLS connection is
  closed and the state is set not running.

func (c *Connection) notificationSender()
  This listens for any notifications it should send and when it receives them it
  then writes the data on the TLS connection. It also has an idle timer of 30
  minutes that will cause it to close down.