add ByteBufCodable interface

this is intended to replace the usage of BytesCodable for most use
cases. It adds a netty4 ByteBuf dependency, which we could get around
somewhat by using jdk ByteBuffers but eh, ByteBufs are better, most
codec users will be depending on ByteBufs soon enough anyway, and it
may be useful for further codec features.