Moved Cartesian product code into a separate module.
Merged Cartesian back into Tape... but more importantly, added Take, Window, and Insert classes and associated instances which allow, well, it's like it says on the can. Added a Signed datatype which allows tagging of containers with a boolean directionality (e.g. a sign), so we can control, if we like, the direction of inserts. With a little magic from UndecidableInstances, we can get exactly the right kind of polymorphism from Insert, without requiring the user to wrap their thing-to-be-inserted in an amount of Composes which match the dimensionality of the thing into which we want to insert. The tradeoff is that type inference gets hurt slightly, which means you can either use insertCompose and manually wrap in the right number of Composes, or use insert and make sure the types are non-ambiguous. Personally, I prefer the latter, because type annotations will generally fix this shortcoming.