improve materialized check logic

Instead of relying on only 'href' being set, we check that we
haven't materialized the resource explicitly. This helps with the
case where the user adds or changes properties locally without
first materializing the resource.
reimplement Custom Data resource

Make it behave like a Python dict, and simplify properties
serialization/deserialization.
remove the hardcoded special-case for deleting CustomData attrs
fix tests

They accidentially passed because check turned from desired:
    if "name" in ("name,):  # element-in-sequence check
to
    if "name" in "name":  # substring check

Which have the same result in the happy path (example here
uses "name" for the content of the key being checked in).
Merge pull request #1 from senko/custom_data

Custom data