Verify that deleting doesn't change blacklisted values

Prior to this, we tested that the result of evaluating the delete expression was
falsy (as it should be per the ES5 spec). This change adds some suspenders to
that belt by also verifying that the value of the property is unchanged after
the deletion attempt.
Teach broker properties.retain

The properties config now has a `retain` key, which is an array of property
names whose values should be retained when they are made unconfigurable.
Implement config.properties.blacklist

Since browsers don't always do what they say they'll do, allow the user to
specify a blacklist of property names that should be clobbered whether they are
reflected or not.

NOTE: I don't know how to test property names that are not reflected by the
      browser. Pull requests welcome.
Rename properties.ignore -> properties.whitelist