Support for dynamic capabilitied

Adds convenient way for objects to introduce additional functionality without changing object interfaces.