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. 

This passes all existing tests and adds a whole set of new unit tests for the new capabilities. 

/cc @fgrehm