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.