[WIP] major refactoring of architecture

|Q            |A  |
|---          |---|
|Bug Fix?     |yes|
|New Feature? |yes |
|BC Breaks?   |*yes!** |
|Deprecations?|no |
|Fixed Tickets| #26  |
|License      |MIT|

This a major refactoring of the search system architecture.

In summary the following has changed;

## ConditionOptimizers 

Formatters are renamed to ConditionOptimizers, and have an optional priority for sorting.

## Input processor changes

View to normalized value transformation now happens in the Input processor.
The SearchConditionBuilder does not use this technique.

Range bounds are now validated when processing, and not as an *optional* process afterwards.

To make InputProcessors reusable, configuration must be provided as first parameter of `process()`.

And last, all processors when testing now share the same assertions to ensure a correct result.

## Values 

To make locking the SearchCondition state easier and enforce a stricter OOP architecture value objects are now immutable and marked final.

`PatternMatch::getViewValue()` is removed as this method doesn't make sense for a string-only value object.

## Symfony validator

The Symfony validator extension is **finally** moved to its own repository and package.
As constraint validation is no longer needed for validating range-bounds.

## TODO

- [ ] Add support for locking the ValuesGroup and FieldSet.
- [ ] Check documentation for inconsistent usage of terms.
- [ ] Make tests for exporters uniform (same like input).
- [ ] Look for missing tests and documentation.