Add create_class_wrapper and class_wrapper

Add two new functions that attempt to mirror the update_wrapper and
wrapper functions from the functools module in the stdlib.

The primary notable difference is that it works on classes instead of
functions. This necessitates a couple of other differences. First, since
__class__, __module__, and __name__ cannot be changed on a class, it
cannot actually update the wrapper class, it must create a new classed
based on it's template. Second, it uses class inheritance to mimic the
unchanged behavior of the wrapped class rather than attempting to copy
all of that functionality into a new class.

class_wraps is then a decorator analagous to wraps. Both take keyword
arguments 'deleted' and 'assigned', which default to
CLASS_WRAPPER_DELETES and CLASS_WRAPPER_ASSIGNMENTS respectively.

It ensures a __wrapped__ property on the new class that is analagous to
the __wrapped__ that update_wrapper() puts on a wrapper function.

This code has _absolutely no_ tests. Yet.
Use __wrapped__ to match Python 3.2+

functools.update_wrapper and functools.wraps in Python 3.2+ add a
__wrapped__ attribute to the wrapper function to allow later unwrapping.
Since that's what we're doing in this module, we want to do it in a way
that is consistent with the stdlib.

Since it's not a part of our public interface, changing the name of this
attribute doesn't require any test changes or a major version upgrade.