General cleanup.

Moved some arguments into more logical places.
Cleans up code, docblocks and typehints.
Refactor moved request
Update documentation.
Pedantic naming
Let's just refer to this as Doctrine now.

Forward looking, there is only one Doctrine.
Add factory method
Refactoring API.

Close down property API
Remove useless constructors
More clean up
Set ComparePlugin to default.
Open config to inheritance.
Abstract class must be abstract (SOLID).
Make FilterUtil a separate component.
Add bits to make a component library
Add dev requirements to composer.
Correct category plugin namespace.
Merge pull request #1300 from drak/filterutil2

General clean-up of FilterUtil