Split ranges along accounting and zone configuration prefix boundaries.

Each store registers a gossip callback for accounting and zone config
maps. On callback, the zone does a binary search using the rangesByKey
sorted slice to find possible ranges which might be intersected by
config map prefixes. On possible hits, the range is dissected along
prefix boundary lines and if there's a necessary split, the range is
split and the process retried.

This allows new zones or accounting prefixes to be specified and ranges
will automatically be split to fit.
this comment makes it sound like contentsChanged=false if the key was previously not set. Below it looks like you do the opposite.