Diminish restrictions for implementation fields

Hello,

I have made some changes to make the plugin more user-friendly. Now implementation map can be more concise. Moreover implementations of features can be generalized to some extent.
Below is the list of changes:

* a feature implementation can be defined by a string, an object or an
array of objects
* `isAvailable` field can have value of any type
* value of `implementation` field can be a string or a function returning a string
* `module` field can have value of any type
* name of the feature is passed into `implementation`, `isAvailable` and `module` functions