Entity Query sucks! Really! erm. Where was I? Yes. Currently you need to implement all five classes (QueryFactory, Query, QueryAggregate, Tables, Condition) to add a single line to code to, say Tables. This takes unnecessary boilerplate to a new level.
Make only an empty QueryFactory mandatory. Then grab the namespace of it and the namespace of any ancestors and use the first class that exists within those namespaces. For eg. if
Drupal\Core\Entity\Query\Sql\QueryFactory then we will look for the rest (Tables, Condition, Query, QueryAggregate) first in
Drupal\user\Entity\Query\Sql then in
Drupal\Core\Entity\Query\Sql. Much like DBTNG drivers just a bit more flexible.
User interface changes
If you were extending Entity Query, you can drop a little boilerblate.