complete btree rewrite

Replaces BTree with BTreeMap and BTreeSet, which are completely new implementations.
BTreeMap's internal Node representation is particularly inefficient at the moment to
make this first implementation easy to reason about and fairly safe. Both collections
are also currently missing some of the tooling specific to sorted collections, which
is planned as future work pending reform of these APIs. General implementation issues
are discussed with TODOs internally

[breaking-change]

Still waiting on compilation/test/bench stuff locally, but the edit-distance on any errors should be very small at this point. This is ready to be reviewed.
So at first I was thinking that it made sense to have B be a generic integer argument, and therefore part of the type, in the long-term. In the most optimized case this can save some space per-node. However it does have one really nice property: the default constructor can pick an "ideal" B for the user based on evaluation of the size of K and V. Of course this falls over a bit when K is actually a collection of some kind like a String, but it's an interesting idea, at least. Regardless, B certainly should never change after initialization.