Feature/preorder traversal

Hip-skip hippety hop and it's memoized!
This should be a result of initialization. Returning a new'ed object gives the impression that it's a property of the object. It will break `addChild` if initialization is removed or the target property is undefined.