Made all functions of Node::Iterator noexcept.

Also some other functions like find_first_child and find_last_child.
Added a comparison operator between Node pointers and iterators.
The find_last_child should always prefer the right most node.

It was calling find_first_child which prefers to left. So now it calls
find_last_child.
The Node iterator is now circular.

This means subtracting some amount from the end iterator works as
expected.
Sort of cleaned up / added a todo to the two Iterator constructors.