Nested Options

My current progress on nested and multi-column Options before I go on vacation.
- Pure Rep encoding without Column type: fully working
- Option type encoding: Looks good, this should work
- New Option extension methods typecheck, type-level tests are in NestingTest.testNestedOptions, They can all be defined in terms of fold

Next steps:
- Add flatten and flatMap methods
- Introduce SumType
- Add Nodes for Option-lifting (reuse OptionApply?) and SumType catamorphism
- Build the correct Reps and Nodes in the new operations
- Add a compiler phase (after forceOuterBinds?) that translates sum types into product types and sum type catamorphisms into equivalent operations on the product type
- Add new outer join methods based on Option types
- Translate the new joins into the correct product type representation (by adding a discriminator column and an extra projection on top of the join)
Well, the next major version is more than just hypothetical but it won't change the Lifted Embedding any more than what's already contained in this PR. The Lifted Embedding is mature and we're pushing the limits of what we can do so a move to an improved Direct Embedding would be the most likely major improvement in the future, but that's certainly more than a year away (if we do it at all).