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.
That's actually not quite right. Strings are immutable, so they're passed by reference. I think what you're remembering me saying is related to when you try to *modify* a string. Because strings are immutable, any time you modify a string value you're using an entirely new chunk of memory. This is in contrast to []byte, where it's possible to modify the underlying array directly without pointing the variable at a different memory address.