Add support for merging range addressing records.

This change generalizes the code in UpdateRangeAddressing to support
removing implicated range addressing records instead of just adding
them. UpdateRangeAddressing has been unexported by renaming to
updateRangeAddressing, and its logic better documented and simplified.

The exported methods are SplitRangeAddressing and MergeRangeAddressing.
Split takes left and right. Merge takes the original left and the
updated, merged result of left + right. Merge actually ended up being
simpler than I thought it might be. In effect, you remove any records
associated with the original left side of the merge (remember that
range addressing records are always indexing the END of the range),
and update the new complete range.

The unittest is pretty hairy. It's been rewritten to support both
split and merge and each step takes both left and right ranges.
In the case of split=false (merge), the left range specifies the
original pre-merge left side and the right range specifies the new
merged range. A further complication here is that when split=false,
the left slice of "expected new" meta keys is actually the slice
of meta keys we expect to see removed.
What do you mean by this comment? Doing what redundantly? We're definitely not creating meta records anywhere except through this function.