Add publishing via QoS 0, 1, 2.  Add subscribe support

Let me know if you'd like to make any changes

I haven't completed the subscription API, specifically the part when the server responds with a Suback "failure" (return code 0x80 - Failure from the spec).  We'll need to properly build that into the codec, and then eventually propagate the error results (e.g., which topic the client failed to subscribe to) to the client.

I'll also work on fleshing out some of the tests using wireshark