Use defaultdict to store various data elements in feature

The main idea behind this is to make certain base behaviour in `Feature` extensible without modification in the future, enabling different types of plugins/interfaces/providers.

This is only a showcase, if you like the idea I would suggest to also change the plugin registry to use a similar pattern.