Allow more types as filter expressions, only specifically disallow Numeric/String expressions

Previously, if a type wasn't recognized, it wasn't allowed.  This
allows you to to use unrecognized types.  Now, such types may blow
up later during literalization if they can't be literalized, but
this allows you to create your own types and use them.

Previously, you could work around this issue by using a placeholder
string:

  where('?', object)

Now you can just use the object directly:

  where(object)
Allow delayed evaluation blocks to take dataset as an argument

Previously, delayed evaluations could not take the dataset as an
argument, which means you couldn't have a delayed evaluation
that based its result on the dataset currently being literalized.

For example, if you wanted to have a dataset that had a column
reference that was always qualified to the dataset source, there
wasn't an easy way to do that.  Now you can do:

  d = Sequel.delay{|ds| Sequel.qualify(ds.first_source, :column)}
  ds = DB[:table].where(d)
  ds.sql # SELECT * FROM table WHERE table.column
  ds.from(:t) # SELECT * FROM t WHERE t.column

Note that this breaks backwards compatibility with
Dataset#delayed_evaluation_sql_append, which now takes the
DelayedEvaluation object instead of the underlying callable.
Fix typo, from gferguson-gd