Insert or Update

A ton of work to close our longest-standing feature request. Includes lots of refactoring of the insert-related code, including a new way to compile mappings from InsertCompiler which allows client-side transformations and gets rid of the requirement to use all columns in the order in which they appear in the lifted value. We should be able to reuse that later for all queries (might be useful for nested options and nested collections).

Fixes #6 and #746. Review by @cvogt.