Add spec_model_no_assoc tasks for running model specs without the associations code

This should be used to check that the main model code has no
dependencies on the associations code.  There were a few places
in record_spec.rb that assumed the associations code was loaded,
move those specs to the associations spec.
Add spec to check that core extensions aren't used inside Sequel

Since 3.0, it's been Sequel's policy to not rely on the core
extensions internally, so that Sequel can be used safely with the
SEQUEL_NO_CORE_EXTENSIONS setting.  However, occassionally
such usage has snuck in, and it's generally not discovered unless
someone hits the code path with the core extensions disabled.

This spec will scan all of the Sequel files looking for core
extension usage, and will fail if it detects any.

This spec actually caught usage of the core extensions in the
shared PostgreSQL adapter that had been there for close to three
years.
Fix possible SystemStackError in SQLite adapter

Using filter here causes a SystemStackError if group/having was
already used on the dataset.  Switch to where since we always want
to modify the WHERE clause.
Refactor delete/update/insert/replace on mysql and mysql2 adapters

Previously, these methods were overridden in order to return
the correct value (affected rows/inserted id) using a block.
Instead, override Database#execute_dui and #execute_insert
which return the correct values, which lets the Dataset methods
use the standard implementation.

While here, make some other minor adjustments:

Add Dataset#replace to the shared mysql adapter, instead of
defining it in every adapter that connects to mysql.

Remove provides_accurate_rows_matched? from the native mysql
adapter.  Remove Dataset#execute_dui overrides from mysql and
mysql2 adapters, since the :type=>:dui setting isn't actually used.

Move MySQL::Dataset::AFFECTED_ROWS_RE constant to
MySQL::Database::AFFECTED_ROWS_RE, and private
Dataset#affected_rows method to Database#affected_rows.
Fix mock adapter Database#execute* if no dataset was used
Increase speed of Model#delete and #destroy by about 75% for models with simple datasets

This makes Model#delete and #destroy use a similar optimization as
Model.primary_key_lookup, caching the entire SQL query to use except
for the primary key.  Since no equivalent for fetch_rows exists for
delete, add a Dataset#with_sql_delete method that just calls the
private execute_dui method.  This is used so there is no need to
clone the model's dataset to execute the SQL.

While here, do some minor micro-ops like caching certain calls in
local variables.

Only significant fallout from this is in the instance_filters plugin,
so modify that not to use this optimization if an instance filter is
being used.
Make core extension spec work on 1.8.6 since that is still supported
Increase speed of Model#this by about 85%

Previously, this was doing 3 dataset clones.  Add a
Model.instance_dataset method that returns a cached intermediate
dataset, so that Model#this only has to do one dataset clone.

Quite a bit of spec fallout since the specs assumed that you could
modify Model.dataset when you now need to modify
Model.instance_dataset.