Unifies AutoPlugin and RootPlugin

* Separates def select into def trigger and def requires.
* Setting trigger = noTrigger and requires = empty makes a plugin a
root.
Updated comments. Typo fix per @jozic
Adds conflict check at the end to enforce exclusion requirements.
More plugins conflict test
Use tabs
Added conflict report and unit tests
Hide unary_! operator from API
Merge pull request #1203 from eed3si9n/topic/requiredAutoPlugin

Unifies AutoPlugin and RootPlugin