Role class which can be handled as a set

Roles are a set of fields with a filtering function attached.

This allows the roles to be operated on just as regular sets, with the extra
operations of addition and subtraction mapped to set union and difference,
which makes sense in the specific case of roles.

Example:
```python
>>> public = whitelist('id','name')
>>> whitelist('id') + whitelist('name') == public
True
>>> whitelist('id') == public - ['name']
True
```