Replace Reifiable with an IsRoot type function

This prevents users from writing the "missing" instances for `Reifiable`
and `Reify`, and in a manner which is cleaner than the hack of using
internal classes to constrain public classes.
Documentation restructuring