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)
Yes, I commented on the previous commit. I also like `Lifted` the best of the new suggestions but I don't think it's much more understandable than `Rep`. Since we're already using Rep and it's also shorter, I don't see a big motivation to change it to something that's only marginally better.