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.
Address concerns about elegance/readability of split on config.

In the process found an error in the prefix config code exercisable
when there are successive prefixes in a config map, such as
"db1" and "db2". Added a unittest for that case.

Also, discovered we were always re-gossiping config data on every
write because we weren't paying attention to a "real" dirty bit--
we were always copying the struct in the ranged for loop and so
never setting the dirty bit to false after gossiping.
Fixed race condition in gossip callbacks test.
OK, really fix data races this time
Upgraded the gossip callback to include contentsChanged bool.

This informs the callback callee whether or not the actual contents
of the info were updated. This can save a lot of work in the event
that the new info just has a shorter number of hops or an updated
timestamp but the same contents--we expect this to be a common
occurence.
added check for whether the range is the leader before initiating splits
Respond to Tobias' comments
Merge pull request #179 from cockroachdb/spencerkimball/split-on-config-changes

Split ranges along accounting and zone configuration prefix boundaries.