Though not fixed/solved, I think we should close this issue as invalid.
KVs must always contain their families because they are self-contained. Moving forward if we ever do locality groups, we'll definitely need them.
By making them self-contained, we never have to rewrite/reallocate the data. ie. our zero-copy reads pass along KV references to the actual HFile block we read in. Our Result is nothing but a List<KV> and we do not care whether they are all the same family or multiple families or whatever. If our KV no longer stores the family we will have to undo the new optimizations (of not building a big Map as we build the Result) and start to track everything per family as we build the Result.
All other issues outlined above like gratuitous object creations are also gone. This optimization would only undo them.
+1 here for closing issue