Abstract "Capability" system so it can be used with hosts

This PR is the first step on the way to providing "host capabilities" like we provide "guest capabilities". This abstracts the capability system in use by guests to a `CapabilityHost` mixin. The existing `Guest` class now uses this mixin. 

There was no plugin API changes or UX changes, so this is just a refactor.

This passes all existing tests and adds a whole set of new unit tests for the new capabilities. 

/cc @fgrehm