Currently we get the ByteVector of an Index with something like:
val indexBytes = MultiIndex.codec
.encode(index)
.map(_.bytes)
.toEither
.leftMap(err => new Throwable(err.message))
This feels like a lot of ceremony, let's add a bytes method to the Index trait that does this for us.