Do not raise KeyError for missing permission

Instead, permissions not explicitly defined are always False.
Bug fixed in RuleSet

The auto-generated dictionary interfaces were not implemented correctly, due to
__getitem__ modifying the size of RuleSet.rules.
Add update() to RuleSet to correctly merge.

The update() method now preserves rules from both parents, rather than
overwriting as in a normal dict. Also changes setitem to be more like a normal
dict.