Remove Dataset#def_mutation_method instance method

The instance method creates a singleton class by defining a
method on an instance, which is going to invalidate method
caches in most ruby implementations.  Plus, it's not something
that should be done.

Replace the need for an instance level def_mutation_method by
allowing the class level def_mutation_method to take a :module
option for the module in which to place the defined method.
If you really want the old behavior, you can call the class
method with a :module option set to the singleton class of the
dataset instance.

As def_mutation_method was public, this is a backwards-incompatible
change.
Switch query extension to use a proxy instead of Object#extend

This new implementation is a modified version of one developed
by chanks after discussion on IRC.  The previous version used
Object#extend at runtime and overrode Datast#clone, and I never
liked the implementation.  This new implementation is better in
every way, and almost fully compatible.  There are the following
small differences:

* Inside of the block, self is a proxy object, not a dataset
  instance.

* This new implementation doesn't try to catch calls to each,
  insert, update, or delete.  However, if you call a method
  that doesn't return a dataset, it raises an error.