WIP: Better errors

* Support for automatically serializing as JSON on publish
* Error messages when attempting to publish bad values
* Error messages when attempting to `finish`, `touch`, `requeue` if the message has timed out. 
FWIW, it doesn't *really* matter if a client tries to respond to a message that times out, it's a non-fatal error.

This state tracking seems reasonably straightforward so it's probably fine, I just wanted to point out that it's not strictly necessary.