Deprecate passing two arguments to Model.new

Model.call is used to create objects already backed by the
database, this just existed for backwards compatibility.
Add removal reminder markers to some associations methods
Add after_initialize plugin for the after_initialize hook

after_initialize isn't used much, but it causes a performance hit
for all model instantiation.  Moving it to a plugin makes that
performance hit only affect people who use the hook.

The hook_class_methods plugin will no longer support the
after_initialize hook at all.  Anyone adding after_initialize
hooks via hook_class_methods will need to switch to defining
an instance method.
Add Model#errors_class private method for choosing the errors class on a per-model basis
Deprecate Model::Errors#[] autovivification (returning empty array when missing)

Autovivification causes problems as it makes #[] not return a
falsely value.  Unfortunately, the active_model spec requires it,
so have just that plugin enable it.
Deprecate nil dataset options and modifying initial dataset

There isn't any reason to support nil as an argument, since the
default argument should be a hash.

The deprecation of modifying the initialize dataset is a
performance optimization, since it means that in Sequel 4, the
default dataset options hash can be a shared frozen hash.  As
clone is used for dataset modifications, none of the current specs
do this.

In the mutation methods, instead of modifying the @opts hash, just
reassign it to the new hash.  This should be faster, avoids
the future issues with a shared frozen hash, and is even more
correct if the opts for the clone have had entries deleted.
Deprecate Database#do as an alias to execute/execute_dui in some adapters

These are really old aliases, and inconsistent with the rest of
Sequel's usage.  Now that PostgreSQL supports Dataset#do to mean
something different, I don't like the inconsistency.

Database#query in the informix adapter conflicts with the query
extension.
Deprecate Dataset#set_{defaults,overrides}, move to set_overrides extension
Don't deprecate reciprocals if current association has conditions/block

If the current association has conditions or a block, but the
reciprocal association does not, it should be safe to use
the reciprocal.  Only if the reciprocal association has a
condition or block should it not be safe. Example:

  Album.many_to_one :artist
  Artist.one_to_many :a_albums, :conditions=>{:name=>/^a/i},
    :class=>Album

Here, artist should not pick a_albums as a reciprocal, since the
album name may not start with "a".  However, a_albums should have
artist as the reciprocal, since any matching album should have
that artist.
Deprecate Dataset#graph_each and add graph_each extension

Dataset#graph_each was originally added as the backbone of
eager graphing.  However, after EagerGraphLoader was added,
it isn't really necessary.  It causes a performance hit to
all Dataset#each calls, since they need to check for graphs.
Deprecate sequel_core.rb and sequel_model.rb

These are the old library names, dating back to when sequel,
sequel_core, and sequel_model were 3 different gems.
Deprecate Sequel.virtual_row_instance_eval accessor

This has had no effect since Sequel 2.
Add Database#supports_{index_parsing,foreign_key_parsing,table_listing,view_listing}?

Currently, the only way to check for support is to call and
rescue NotImplemented.  Exceptions for flow control is not really
a great idea, so it's better to just check for support.  In
Sequel 4, the methods will just not be defined if they aren't
implemented, so these will become respond_to? checks.
Deprecate Sequel::NotImplemented and defining methods that raise it

If something isn't implemented, there should just not be a method
for it.  A default method that just raises an exception is a bad
idea.
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.