Support add_*/remove_*/remove_all_* pg_array_to_many association methods on unsaved model objects

The shared association support previously assumed at
add/remove/remove_all methods all required a primary key on the
receiver.  This was true for all association types, but for
pg_array_to_many, it is not true.  pg_array_to_many is similar
to many_to_one database-schema wise, and since
add/remove/remove_all only affect the array column and no other
tables, a primary key on the receiver is not required.

Looking at the existing association reflection methods, there
was already one for whether the dataset needs a primary key. The
cases where add/remove/remove_all need a primary key are the same
for where the dataset method needs a primary key, so just reuse
the same condition.
Issue constraint_validation table deletes before inserts, so modifying constraint via drop/add in same alter_table block works

Previously, the delete would happen after the insert, so the lines
would be deleted from the constraint validations table.  The
constraints were still setup correctly, but they wouldn't have
reflection information for the plugin to use.
Refactor Model.set_dataset to split out method

This splits out the logic that creates the input argument into
the dataset to use as the model's dataset.  This makes it easier
for global plugins to automatically modify all model datasets
in some way.
Make SELECT table.* FROM table recognized as a simple select all

This is used in the graph support so that a join to a subselect
can be replaced with a join to the table itself.
Add table_select plugin for selecting table.* instead of * for model datasets

Several people have noted issues when joining model datasets
to other tables, where the returned columns have values from the
other table's columns overriding the model's columns. The reason
this occurs is the default selection for all Sequel datasets is *,
since no other default selection makes sense (a dataset by
default does not even have a table).  Because Sequel returns
record sets as hashes, and the adapters generally add values to
result set hashes in column order (with later ones with the same
name overriding previous ones with the same name), if you joined
a model to another table that has columns with the same name (a
common usage), you can end up with result sets where the column
value is the value of the column with the same name in the other
table, instead of the model's table.

ActiveRecord uses a default of SELECT table.* FROM table, allowing
you to join your model to another table and not have the other
model columns be put in your result set.  This plugin makes Sequel
more similar to ActiveRecord in that area, which should ease the
transition for some users.

Note that it's probably better to use explicit selections any time
you join tables.  For one, when joining a model dataset to another
table manually, the chances that you need either:

1) all columns in the model table and none in the other table; or
2) all columns in both tables

are small.  In general you need some columns from the model table
and some columns from the other table.
Allow parsing of primary key information for models that select table.*
Remove spec guard for sqlanywhere adapter