Improve logging of packet decoding errors

* Inherit `BadPacketException` from `DecoderException` to prevent it from getting wrapped in the latter in some cases
* Add `DetailedBadPacketException` and use it to wrap anything thrown while decoding a packet
* Log packet decoding errors at SEVERE level, *if* they are not the `Handshake` packet i.e. the first packet read. Hopefully, this will seperate the important stuff from the noise.