Remove rake stats task

I don't think this provides much in the way of useful information.
Remove rake dcov task

I've never used this, and I don't think dcov is maintained anymore.
Bring back and update Sequel::Deprecation

Move deprecated.rb from extra to lib, and update it.  Remove the
metaprogramming code, and switch backtraces to backtrace_filter.
Allow backtrace_filter to be a proc that can filter the output.
Add deprecated_module for deprecating entire modules.
Deprecate core_extensions if not explicitly loaded

This adds the main deprecation in Sequel 4, deprecating all of
the core_extensions methods unless they have been explicitly
loaded.  This is done by making a copy of the core_extensions,
and then adding deprecation warnings to all of the methods it
adds.  If the core_extensions are loaded, its implementation will
override the default deprecated one, so the deprecation messages
will go away.

This also adds the ruby18_symbol_extensions extension for the
Symbol#{[],<,<=,>,>=} methods, which Sequel previously overrode
by default on ruby 1.8.  I really want to discourage their use,
so they are deprecated by default even if the core_extensions
are loaded explicitly.  You have to load the new extension if you
want the behavior.

While working on this, I noticed some of the core extensions
were not being tested, because the related methods were in an
included module.  So add specs for those.

This modifies the core_extensions_spec to handle different types
of environments via the SEQUEL_DEPRECATED_CORE_EXTENSIONS
environment variable:

* missing: runs with just the explicit core extensions and with the
  ruby18 symbol extensions on ruby 1.8
* OVERRIDDEN: runs with the deprecated core extensions and the
  explicit core extensions, without the ruby18 symbol extensions
* SYMBOL18: runs with just the deprecated core extensions and the
  the ruby18 symbol extensions
* OVERRIDDENSYMBOL18: runs with the deprecated core extensions, the
  explicit core extensions, and the ruby18 symbol extensions
* other value: runs with just the the deprecated core extensions
Add ability set the default for join_table's :qualify option via Dataset#default_join_table_qualification

In Sequel 4, the default is changing from :symbol to :deep, and
this makes it possible to switch it back easily.
Add ability to silence deprecation warnings by marking specs

You can use the SEQUEL_DEPRECATION_WARNINGS environment variable
if you want to see the deprecation warnings even in the marked
specs.
Add deprecation warning for :root=>true use in json_serializer

This is changes to mean :root=>:collection in Sequel 4.  Add
the ability to make things forward compatible by adding support
:root=>:both, and fix existing spec to use it.
Allow specifying explicit columns to update in Model#save via the :columns option

This new option should be used instead of passing the columns as
separate arguments, which is now deprecated.
Deprecate Dataset#{and,filter,exclude,or} affecting the HAVING clause

These methods should not be context sensitive, they should always
affect the WHERE clause.
Deprecate Dataset#and, #or, and #invert raising exceptions for no existing filter
Deprecate Dataset#select_more meaning Dataset#select when called without an existing selection
Add filter_having extension for making Dataset#{and,filter,exclude,or} affect the HAVING clause if present
Do not automatically convert virtual row block return values to arrays by some Dataset methods

I'm guessing the reason this wasn't discovered sooner is that
few people have virtual row blocks return hashes or other values
that are automatically converted to arrays by Kernel#Array.
Add hash_aliases extension for making Dataset#select and #from treat hashes as alias specifiers

Deprecate the behavior by default.  These are the only two methods
that treat hashes as aliases, and it is inconsistent with the
rest of Sequel.  The main problem this causes attempting to use
hashes in subselects for equality breaks.
Refactor hash_key_symbol use in dataset actions

hash_key_symbol no longer takes an optional argument.  However,
if a block is given, it yields to the block instead of raising
an error.

Add _hash_key_symbol for the recursive handling and hash_key_symbols
to handle arrays, which DRYs up some code.
Add aliases to internal calls to get

Starting in Sequel 4, get will be automatically aliasing these
anyway, but in the meantime this closes a possible DoS vulnerability
in some of these methods depending on how the database chooses
a column name.
Deprecate the correlated_subquery eager limit strategy

It isn't compatible with standard SQL in the many_*_many case, is
too complex, most databases don't support it, most of the ones
that do support a better eager limit strategy, and it only has
advantages over doing the limiting in ruby in some cases.
Deprecate validates_type allowing nil values by default

None of the other validations allow nil by default, so validates_type
shouldn't either.

While here, update existing validations to use explicit nil checks
instead of general falseness checks.  Among other things, this
probably fixes a bug in validates_unique where a false value would
skip the uniqueness check.
Deprecate automatic reciprocals in certain cases

If the automatic reciprocal is ambiguous, or if the only candidates
for the reciprocal have conditions or a block or a different
primary key (or the current association has conditions or a block),
at best the correct answer will only be chosen 50% of the time.
It's best to force the user to make a choose of reciprocal in that
case.

While here, refactor the reciprocal determination so that
many_to_many does not have a different implementation.  Also, set
up explicit reciprocals in the tree plugin so that the rcte_tree
plugin doesn't end up with ambiguous ones.