Moved the search of elements to an ElementFinder

This extracts the complex logic out of Element::findAll. The logic is
better encapsulated and this keeps the collaborators of the element to a
sane number.
The ElementFactory introduced previously in the refactoring (mostly to
allow mocking the elements properly after moving the instantiation out of
the driver) is now gone. the ElementFinder is responsible for
instantiating the NodeElement.