Big rewrite of Reify

This enables `PathName` to be an instance of `Reify` (as the identity)
which will be useful for writing system operations that are generic on
`Reify` and will thus work with both `Path` and `PathName`.  Thus, we
also stop exporting `reify` from `System.Path` because the idea is that
these future system operation functions will call it for the user and
the user will rarely need to call it themselves.  We still export the
type class itself to allow including it in type signatures without
having to import `System.Path.Core`.

It is also slightly safer than before because it will actively prevent
users from writing a bogus `instance Resolve Root` on Windows, etc.
Restructure Internal module

Make each type a Haddock section that includes any functions on that
type.