Abstract class to manipulate sequence of bytes
The use case of this class is abstracting manipulation of types that are just
wrapping a bytestring with stronger and more meaniful name.
Usual definition of those types are of the form: newtype MyType = MyType
ByteString.