LOW PRIORITY: FEATURE: Add data handling to SimplePush

Allow "data" to be send to actively connected clients. This does NOT store the data, so if a client isn't connected, the data WILL BE discarded.

Also: 

* add unit tests for Update handler
* refactor code to provide framework for adding unit tests for handlers
* removed some extraneous classes that were causing data duplication.
`go -race` complains about a race caused by `time.AfterFunc` reading `self.sock.Uaid` to disconnect idle clients that haven't completed the handshake. Seems like it's benign, but do you think it's worthwhile protecting `self.sock.Uaid` with an `RWMutex`?