Clean up message parsing

* `UpdateHandler`: Always respond for bad and incomplete primary keys.
* Simplify `isPingBody`. Use `json.Compact` instead of hand-tokenizing the byte slice.
* Fix an issue that treated arbitrary one-byte slices as pings.