Clean up and test collation function creation
More flexible `column` implementation.

Removes the previous mess with conversion operators and makes it easier to
use with nicer syntax.

- Binding the values type to the column instead of it's `val()` function
  is more logical, since usually all values in a column are of the same
  type.
- Since actually the columns in sqlite3 are not necessarily of a certain
  type (it's all strings internally in the database), the `val<Type>()`
  interface is still available, making it possible to receive a single
  value in a different format.
- There doesn't have to be a type associated with the column, but then
  no implicit conversions are available. This is appropriate, since
  having multiple conversion operators for different types easily leads
  to ambiguities (which were present in the previous, now replaced,
  implementation)
Fix sql in test case