More methods for NodeElement children manipulations

Added useful methods to get elements:

* getAllChildren()
* getDirectChildren()
* getFirstChild()
* getLastChild()
* getPreviousSiblings()
* getPreviousSibling()
* getNextSiblings()
* getNextSibling()
* findByName($name)
* findByTag($tag)
``findAll`` can never return ``null``.

and it should be ``NodeElement[]`` or ``self[]``, not ``static[]``. If you extend the NodeElement class, the elements returned here will not use the child class (``findAll()`` always returns a list of NodeElement instances)