Avoid leaking internal pointers with 'static lifetimes

the `get_root` methods were tripping over the bug https://github.com/rust-lang/rust/issues/13853, which is unable to handle a method like `fn foo<'a, T: Bar<'a>>(...)`. This PR avoids that bug by moving the lifetime onto the trait.