Associativity experiment

By defining a linked list of path morphisms and moving the composition
of morphisms out to a function we can enforce associativity in the types
and gain a true identity, which combine into a correct category without
hiding any constructors.
Drop End and rename some types
Reintroduce End as Null

We safe-guard against the previous problem with the identity that you
could pass it to reify to produce a garbage PathName, by introducing a
class Reifiable whose sole instances are Directory and File and that we
use to constrain the target object of the path to be reified.
Source reordering