Refactoring

@Nyholm I've stared working on it but when I was making changes I've discovered more things that need to be discussed.

Specification itself really can be applied only in one place - WHERE clause, for all the others operations it doesn't really make sense, here is the list of thing that also are part of a query:
- Selects (so selecting only partial result)
- Joins
- Order
- Limits
- Grouping
- Having

Also additionally there are thing that are applied to the query but are part of doctrine, like cache.

I'm sorry it took so long but once I realised that we have bigger problem to solve I couldn't really decide how to approach it and how to solve, current WIP in the PR.
This use is not correct (it is also wrong in the PHP spec). It should be `Happyr\DoctrineSpecification\Exception\InvalidArgumentException`