Improve our capabilities support to not hard-code 2 level resolution.

Our capabilities are no longer limited to a category.name format.
Capabilities.has_capability can take variable arguments and traverse the
capabilities list from that. For example, passing 'foo', 'bar', 'foobar'
will properly navigate {'foo': {'bar': {'foobar': True}}}.