Add support for unbound methods in compare_as=

With default=, the argument was allowed to be an unbound method and the
code detected this.  However, equivalent support was not there for
compare_as.  Unfortunately, there doesn't seem to be an easy way to tell
the difference between a lambda taking a single argument and an unbound
method call.  So, move to differentiating between method and function by
the name of the first invocant as is python convention.  Add a warning for
old code (including one test) which does not match this convention so as
not to break backwards compatibility.  Access to the object, so that the
method call can be bound when needed, required the introduction of a new
sub-class API method, normalize_object_slot.
Release 0.5.2
Squash the new warning in the test suite

Solves:

    test_property_types (test_types.TestTypeLibrary) .../tests/test_types.py:47: UserWarning: 'default' first argument should be called 'self'
      fullname = UnicodeProperty(default=lambda x: x.name, lazy=True)
    ok