Diminish restrictions for implementation fields

* 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