Deprecate Database#default_schema

default_schema has caused numerous problems over the years.  It only
affects a subset of usage, and not very consistently, so Sequel will
be much better off without it.
Deprecate Model blacklist-based security methods and move them to a plugin

Blacklist-based security is a bad idea as future columns/setters
added to the model will automatically be eligible for mass
assignment.
Move Dataset#[]=, #insert_multiple, #to_csv, #db=, and #opts= to sequel_3_dataset_methods extension

These all have issues:

  []= is too easy to misuse and update something you didn't expect.
  insert_multiple is a slower version of multi_insert.
  to_csv doesn't use a real csv library.
  db= and opts= allow you to change things you shouldn't change.
Speed up Dataset#clone

If there are no columns, then iterating over the passed opts is
pointless.  If there are passed opts, the not creating an
intermediate array is faster.
Setup mssql_unicode_strings lazily on MSSQL

There's no reason to by the penalty on all new datasets.
Deprecate passing an options hash to Database#dataset or Dataset.new

Instead of requiring that an options hash be passed, require
that no options be passed.  This forces you to have to clone
to modify datasets.  Looking at the existing code, almost nothing
passed an argument hash to these methods.

Instead of cloning a hash with deprecated methods, just extend a plain
hash with the deprecated methods, as that appears to be better for
performance.
Significant refactoring

This commit contains a bunch of interrelated changes.

First is the removal of the four remaining class variables from
Sequel.  These class variables were used to set the defaults all
databases/datasets.  They are being switched to instance variables
of the Database class.

Second is that the identifier mangling methods are being set on
Database initialization instead of lazily.  This causes problems
with adapters that use subadapters, because the subadapters
identifier mangling default settings were not applied until after
database initialization.  Work around this by making all shared
adapter's DatabaseMethods reset the identifier mangling settings
when the database is extended with them.

Third is the addition of a Database#adapter_initialize private
method that is called inside #initialize before the database is
added to Sequel::DATABASES.  The previous way of just overriding
initialize has problems because at that point the after_initialize
method has already been called, which could result in running
code on a half-initialized adapter.

Fourth is the caching of a default dataset used for Database fetch,
from, select, and get calls.  This saves an extra dataset creation
in every call.

Finally, deprecate Database#reset_schema_utility_dataset private
method.  No internal callers left, and I don't expect it is
actively used by external code.
Deprecate Dataset checking that the Database implements the identifier mangling methods

The reason for the current behavior is that when the identifer
mangling methods were introduced, just calling the methods
broke tons of specs.  As Sequel::Database instance implement
the methods, checking respond_to? just hurts performance.
Deprecate Model.print and Model.each_page

Neither Dataset#print nor Dataset#each_page is defined by default,
so having the model methods doesn't make sense.  These were only
for backwards compatibility with Sequel 2.
Deprecate Model.pk_or_nil

This was originally used by the old eager graphing code, but
that was the only internal user.
Deprecate pg_auto_parameterize and pg_statement_cache extensions

These were basically an experiment to see if auto parameterization
made sense for Sequel.  It doesn't appear to.  Manual use of
prepared statements where it makes sense is a much better approach.
Deprecate Model#set_values

Unfortunately, this only deprecates the overriding of the method,
not the calling of it.  There isn't a way to deprecate the calling
of the method that doesn't result in a ton of of spurious
deprecation warnings or breaks existing code.

The reasoning behind this is that set_values was never designed
to be used by external code.  It was only public because Model.call
calls it.  In 4.0, Model.call will just set the hash value directly.
The two other users of it are manual refresh calls and then automatic
refreshes from the database after insert.  Those two cases are
currently handled the same way, but they will be split in 4.0,
since they result in undesireable behavior (clearing caches in the
automatic refresh case that don't need to be cleared.
Deprecate identity_map plugin

Also, fix the pg_auto_parameterize and pg_statement_cache
deprecations to happen on every time they are loaded into a
database, instead of only on require.

Delete the deprecated plugins from the plugin webpage, and
alphabetize the list.
Move cache_anonymous_models accessor from Sequel::Model to Sequel

It doesn't make sense to Sequel::Model subclasses to response to
cache_anonymous_models.  In internal usage, it's called in a
Sequel module singleton method, so it really belongs to the Sequel
module.
Deprecate creating Model class methods automatically from plugin public dataset methods

This usually ends up with class methods created unintentionally.
With the introduction of Plugins.def_dataset_methods, it's very
simple to have the class methods created, and in the appropriate
module instead of directly on the class.
Deprecate SQL::Expression#to_s taking an argument and returning a literal SQL string

There is a general assumption in ruby that to_s be callable without
an argument, and SQL::Expression#to_s violates that.  It's not
needed internally, and once it is removed, the default ruby behavior
will take over.
Deprecate Dataset#table_ref_append

This is an old alias that is no longer used internally.
Deprecate methods in Dataset::*_APPEND_METHODS and .def_append_methods

These methods were used by the old dataset literalization code,
before the refactoring.
Deprecate Model::InstanceMethods.class_attr_{overridable,reader}

These were only called with static input, so they don't need to be
methods.
Deprecate passing an unsupported lock mode to Dataset#lock on PostgreSQL

There are only a handful of allowed lock modes, and this stops
lock from being vulnerable to SQL injection.