Replace some shared_ptr with raw pointers
In cases where a pointer must be passed without transferring ownership, the pointer can be a (const) raw pointer instead of a shared_ptr, especially in cases where shared_ptrs create a circle like described in #9.
Deleting a branch is permanent. It CANNOT be undone. Continue?