Add support for custom serialization formats to the serialization plugin

This refactors the serialization plugin.  Instead of having hardcoded
support for just :marshal, :yaml, and :json, you can now use a custom
serialization format by supplying a serializer/deserializer pair of
callable objects.  You can either supply this pair as an array of two
elements in place of :marshal, :yaml, or :json, or you can register
your own format using Sequel::Plugins::Serialization.register_format.

This is not completely backwards compatible. Model.serialization_map
now contains a callable object instead of a Symbol, and
Model.serialization_format has been removed.
Model.define_serialized_attribute_accessor private method now takes
two callable objects before the columns, instead of a single symbol
before the columns.
Add Dataset#group_rollup and #group_cube methods for GROUP BY ROLLUP and CUBE support

ROLLUP and CUBE are used to add subtotal rows when using GROUP BY.
I believe this is in a recent SQL standard (SQL99?), and it's
supported by Microsoft SQL Server, DB2, and Oracle.  ROLLUP (but not
CUBE) is supported by MySQL (using different syntax) and Derby.
Fix Dataset#empty? for datasets with offsets when offset support is emulated

When the emulated offset support is used, the default empty?
implementation causes problems as it doesn't provide aliases for
all columns.

This doesn't fix empty? on Oracle, which uses a custom empty? method,
but that fix will come shortly.
Fix Dataset#empty? when using the emulated offset support on Oracle
Run transaction specs both with and without savepoint support to cover both codepaths
Remove unused SQL_QUERY_TYPE constant and #sql_query_type private method

Both the prepared statement argument mapper and stored procedure
support had these constants and methods defined.  The JDBC adapter
was the only thing using them, and it didn't need to.
Add a modify a spec for additional coverage
More association reflection specs for better coverage
Make mock adapter identifier_output_method default to nil

Before, it defaulted to downcase due to a typo.  While here, add
some more specs for better code coverage.
Make Dataset#exists use a PlaceholderLiteralString so it works with prepared statements

Before, exists just used a LiteralString, which doesn't work with
prepared statements as it does the literalization too early. By
using a PlaceholderLiteralString, the literalization is delayed
until the query is needed.

This is a minor breakage of backwards compatibility.  A
LiteralString is a String subclass, so you could use it anywhere
you could use a string.  A PlaceholderLiteralString is an
SQL::Expression subclass, so you can only really use it inside
Sequel.  I don't expect many people are using exists and not
passing the result to another Sequel method, though.
Allow Dataset#full_text_search usage with prepared statements

Just like Dataset#exists, #full_text_search was literalizing too
early.  This makes it use a PlaceholderLiteralString to delay
literalization, so that it works with prepared statements.

Sequel didn't previously support creating full text indexes
on Microsoft SQL Server.  This adds support for them, but you
need to have previously set up a default full text search
catalog, and you need to provide a :key_index option with
an index name symbol when creating the index.

Previously, full_text_search on MSSQL didn't support multiple
search terms, this adds support for that.

Unfortunately, I can't test the SQL Server changes, since SQL
Server 2008 R2 Express doesn't ship with full text search
support.  If someone with access to an SQL Server installation
with full text support could test this commit, I'd appreciate it.

This breaks backwards compatibility in a small way, as the
private full_text_string_join method on in the shared postgres
adapter now returns an SQL::StringExpression instead of an
already literalized string.
Handle case where PostgreSQL server version can't be determined from query

Before, if the server version couldn't be determined correctly,
the adapter basically broke.
Fix a typo in the sqlite shared adapter

This breaks backwards compatibility, as the typo was in the name
of a constant.  But I'm assuming anyone using the constant would
have notified me of the typo before doing so.

While here, fix an RDoc comment.
Add database type support to the mock adapter, e.g. mock://postgres

This allows you to use the mock adapter while having database-
specific behavior.  It can be used to see what SQL will be
used on a particular database, without needing to install a
database driver for it.

This implementation is fairly simple, and there could well be
some things that don't work this way, but it seems to work
fine in simple testing.
Added documentation for selection of multiple items via array in the dataset filtering file.
Handle clob types as string instead of blob on H2

Handling clob types as blob breaks on H2 as H2 doesn't hex-unescape
the input like it does for blobs.  Treating clob types as strings
appears to present no issues.
Merge branch 'master' of ssh://work-current/home/billg/sequel
Raise error if tables from two separate schema are detected when parsing the schema for a single table on PostgreSQL

Before, Sequel didn't raise an error in this case, leading to
problems later down the road, such as model classes having
primary keys like [:id, :id].  It's better to raise an error
immediately and force the user to pick a particular schema.
Support RETURNING with DELETE and UPDATE on PostgreSQL 8.2+

When I committed this support, I thought it was a new feature in
9.1, but it has actually been supported since PostgreSQL 8.2.
Thanks to funny-falcon for letting me know.
Dataset#insert_multiple now returns an array of inserted primary keys (Fixes #408)

Previously, it just returned the array of hashes.  This obviously
breaks backwards compatibility, but makes the method significantly
more useful.