Implemented Intersection

I had to rework Betweenable.

All of the functions it provided still exist, and can be written using
the new methods Betweenable provides, but I had to move Betweenable back
a level, because it was abstracting too much away.

With the new level, which returns which dimensions overlap, I can write
the intersect function abstractly for any Betweenable.

The name Betweenable doesn't really make sense anymore, but... meh.
Maybe I'll change that...
Implemented alter (and delete)

So, delete shared a lot of logic with insert.

Looking around Data.Map, I found what I wanted to base my consolidation
on.

alter takes a (Maybe v -> Maybe v).
That allows one to create things, edit things, delete things, update
things, append to things if they exist, etc.

So, I put all of my tree traversing logic into alter, along with the
bits to handle the inputs and outputs of the function.

Then I put all the tree maintenence code into build_node.
That checks all the subdivisions, and returns this node, either
intantiable or not.

So, all in all, the logic I need to insert and delete is only in one
place, and it actually ended up blowing me away how simple and elegant
this whole solution has been.

I feel like I must be missing something huge, and that it actually
doesn't work.

Also, I'm a much better Haskeller now than I was, so I took out some
bits I don't like anymore.
I expect there to be some more style and scope changes coming.