Removed Offsetable, Changed Divisible

Alright, I did what I've wanted to do for a while.

The only thing I was using Offsetable and Divisible for was to join
them into a Zone.

I thought "Why don't I just do that in the first place, rather than
having the weird offsetable and ugly divide_into_lower and
divide_into_upper functions that each do half of something?"

I decided to leave it, since I figured it was easier to implement a few
smaller functions than the "big" one.

Tonight, though, I got fed up with Offsetable.
So, I got rid of it and changed divisible to provide divide_zone_by
directly.

Because Divisible now involves Zones directly, it lives in Data.Zone
now.

Putting the upper and lower together, while I was thinking before would
be just taking the two logic streams I had before and zipping them,
ended up being even easier than that.
I was dumb before, and computing Zones directly is actually quite
natural.

The tuple case got very slightly more complicated.
Essentially, since the recursive functions spit out zones now, I have to
pull the start and end out of those zones, but then I just put them
together into a tuple.
So, essentially, rather than using (,) I use:
(\(Zone l1 u1) (Zone l2 u2) -> Zone (l1, l2) (u1, u2)

And that's the only extra complication.
All of it.

So, I'm calling this a win, I think.

TL;DR:
I hated Offsetable, but I was afraid to get rid of it because I thought
it'd make instances more complicated, actually made things simpler.