Add insertOrUpdate to InsertInvoker.

- Refactor InsertInvokers: Split them off from InvokerComponent into a
  separate InsertInvokerComponent because in the JDBC implementations
  they contain a lot more code than all other Invokers combined. A
  separation into traits and protected implementation classes makes
  them more readable and allows InsertInvokers for "return ... into"
  to always work out of the box without extra customization in drivers.

- Remove the unnecessary "forced" parameter from ResultConverter.set.

- Add an UpsertBuilder to JdbcStatementBuilderComponent which builds a
  standard SQL MERGE statement by default.

- Add CheckInsertBuilder and UpdateInsertBuilder for use in emulated
  client-side insertOrUpdate operations.

- Add JdbcProfile.capabilities.insertOrUpdate to indicate native
  insertOrUpdate support in a driver.

- Move scalarFrom out of QueryBuilder to JdbcProfile (UpsertBuilder
  needs it, too).

- Make ResultConverterCompiler stateless and use the index from the
  path into the ResultSetMapping instead of enumerating columns there.
  In the future, this could also be used for query operations to allow
  transformations of client-side mappings.

Driver support (which makes you wonder why we even bother with native
MERGE support, given how limited it is):

- Hsqldb uses the standard MERGE syntax but cannot return generated
  keys from a MERGE, so we have to use the client-side emulation when
  returning keys.

- MySQL requires a custom upsert command with good semantics. We can
  use it in all cases.

- H2 and SQLite require custom upsert commands and can only perform
  upserts with forced insert semantics, so we have to use the
  client-side emulation for tables with AutoInc columns.

- PostgreSQL uses a multi-statement server-side emulation.

- The client-side emulation is used for Access and Derby.

Fixes issue #6. Tests in InsertTest.testInsertOrUpdatePlain and
InsertTest.testInsertOrUpdateAutoInc.