Make ignore_empty_slots also ignore 'empty' records

If you were comparing two records, and one side had no value in a slot but
the other side had a record which was all effectively empty, it would still
show as added/removed, even with 'ignore_empty_slots'.  This change expands
that so that if that option is set, it continues to recurse, but passing in
the ``_Nothing`` instance and only surfaces an added/removed event if one
comes out of the descent.  This is better than trying to implement this in
the normalization hook (ie, normalize_slot), because it can be filter-aware
and re-use the existing descent.  This probably isn't a complete approach:
notably, the logic does not work for items in a collection.  It's a start.
Bump setup.py version

Not changing the docs version, because the docs didn't change.
Fix some exceptions when (probably inadvertently) comparing unparsed data

The compare_dict_iter and compare_list_iter functions are quite limited
compared to compare_record_iter and compare_list_iter, for instance they don't
recurse.  If you end up passing extraneous=True to the diff mechanism, and your
input JSON data has complex unparsed fields, then you'll get exceptions like
this when diff recurses into those fields:

    ======================================================================
    ERROR: test_compare_typical_json_nonsense (test_compare.TestRecordComparison)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File ".../normalize/tests/test_compare.py", line 347, in test_compare_typical_json_nonsense
        ), all_diffs)
      File ".../normalize/tests/test_compare.py", line 45, in assertDifferences
        differences = set(str(x) for x in iterator)
      File ".../normalize/tests/test_compare.py", line 45, in <genexpr>
        differences = set(str(x) for x in iterator)
      File ".../normalize/normalize/diff.py", line 391, in compare_record_iter
        prop_fs_b, options,
      File ".../normalize/normalize/diff.py", line 673, in compare_dict_iter
        vals.add((v, seen[v]))
    TypeError: unhashable type: 'list'

    ----------------------------------------------------------------------

And this one, if you passed `ignore_empty_slots` to diff:

    ======================================================================
    ERROR: test_compare_typical_json_nonsense (test_compare.TestRecordComparison)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File ".../normalize/tests/test_compare.py", line 361, in test_compare_typical_json_nonsense
        {"REMOVED .unknown_json_keys"},
      File ".../normalize/tests/test_compare.py", line 45, in assertDifferences
        differences = set(str(x) for x in iterator)
      File ".../normalize/tests/test_compare.py", line 45, in <genexpr>
        differences = set(str(x) for x in iterator)
      File ".../normalize/normalize/diff.py", line 391, in compare_record_iter
        prop_fs_b, options,
      File ".../normalize/normalize/diff.py", line 670, in compare_dict_iter
        for k, v in propval_x.iteritems():
    AttributeError: '_Nothing' object has no attribute 'iteritems'

    ----------------------------------------------------------------------

Fix this by converting any unhashable value to a hashable one using repr(), and
by using the utility generator to iterate over these simple collection types.
Let's call this 0.4.6

Version numbers are free.
Fix date in changelog for 0.4.x
Add URL to setup.py

Fixes:

    warning: check: missing required meta-data: url
A couple of minor tweaks for pypi
Update setup to use install_requires
Merge pull request #38 from adepue/master

Update setup to use install_requires
Trap Exceptions from Property coerce functions

These can be a bit indecipherable at times; isa=datetime being the
canonical example.
Fix a minor bug with DatetimeProperty being assigned a Date

This coercion was not tested and had a bug.  One of the untested coercions
turned out to be 'impossible' to trigger; document that.
Add support for 'compare_as' on properties

Test this API, which is supposed to be convenient!  So, supply a property
subclass which accepts the "compare_as" property.  "compare_item_as" is
still missing but that's fine.
Remove Record.walk

Undocumented, difficult to use, replaced by VisitorPattern.
Refactor Visitor class into VisitorPattern and Visitor

The problem with the Visitor is that it didn't work on visiting input
and returning types.  Completely change the API, splitting it into an
instance which is specific to the visiting (the Visitor) and the class
methods which define what will happen along the way (the
VisitorPattern).
Update sphinx docs to commit 0.4.6-9-ge2e4a77