Simplified the AbstractLoadPathImplementation trait

Implementations no longer need to implement a separate getStatus method:
the getLoadPath method is now responsible for returning either a load path
or an excuse for failing to return a load path. This commit also tidies up
the names of the case objects that represent those excuses
Removed most of the code that assumes that load path providers are classes

The abstract load path machinery is now powerful enough to subsume all the
others, so that's just what I plan to do. All the other providers will
become objects with apply and unapply methods to emulate the existing
behaviour
Updated the load path UI to not assume that load path providers are classes
Renamed the CoqLoadPath class to LoadPathEntry

This is part of the ongoing work to tidy up and rationalise the load path
code
Renamed the AbstractLoadPathManager class to LoadPathManager

This class will eventually be responsible for all load path resolution
Changed the way that LoadPathEntry represents coqdir values

The rest of the codebase -- including LoadPathEntry's own expand method! --
considers coqdirs to be Seq[String]s; this isolated use of Option[String]
was a peculiar and unhelpful anomaly
Added abstract load path implementations for some other types of load path

DefaultOutputLoadPath and ExternalLoadPath have yet to be reimplemented in
this new style, but that shouldn't take long
Added abstract load path implementations of the remaining load path types

The foundations have been laid; now begins the more interesting work of
using this new code to replace the old load path providers
Made the load path identifier generation code public
Removed the last bits of code that assumed load path providers are classes
Added a companion object for the LoadPathManager class

This object contains a single instance of the LoadPathManager class; this
instance will soon be in charge of all load path resolution
Replaced all of the load path case classes with special wrappers

These wrappers are API-compatible with the old case classes, although I
confidently expect to find a horrible bug or two before too long
Removed the ICoqLoadPathProvider trait

Its replacement is the recently-introduced LoadPathProvider case class,
which does the right thing by always deferring to LoadPathManager
Renamed the AbstractLoadPathProvider and -Implementation traits
Gave the load path provider classes more sensible names

Since they're all LoadPathImplementationFactories now, their names all end
with "Factory", and the one for abstract load paths has lost its "Interim"
prefix
Added a new model class representing an incomplete load path entry

This class, ingeniously called IncompleteLoadPathEntry, represents its path
not as an IPath but as a sequence of variables and strings
Made all LoadPathImplementations use incomplete load paths internally

The normal load path is now generated by first creating incomplete load
path entries and then completing them by substituting in the appropriate
variables