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).
Bump version & amend docs for release
Release engineering for 0.4.7 PyPI release
Merge branch 'maint'

Conflicts:
	CHANGELOG.rst
	setup.py