Guard against attempts to use null annotation models

Normal Coq editors accessing normal workspace resources should never have
null annotation models, but there are other kinds of editor and other kinds
of input
Remove empty output directories when the Coq builder finishes
Removed the command, button and handler for manually triggering coqc

The Coq project builder is now the only way to compile proof scripts
Simplified the ProjectSourceLoadPath constructor

In order to add support for inter-project dependencies, the load path code
nedss to be cleaned up a bit. To this end, the ProjectBinarySourcePath
class will go away in the next few commits
Added another layer of indirection to the Coq project load path mechanism

Coq projects now contain ICoqLoadPathProviders; unlike ICoqLoadPaths, these
can represent more than one load path entry
Don't attempt to clean up folders that don't exist
Added support for inter-project load path references

This isn't ready for real use yet: the project configurations will also
need to be updated in order to invoke the builders in the right order
Tidied up the load path UI slightly

This is an incredibly minor fix; obviously a proper UI will be needed soon
Added keyboard shortcuts for the remaining "Set Printing" commands
Introduced separate icons for Coq files and Coq views
Made the ICoqElement.getAncestor method use the TryCast object

As an added bonus, this commit also seals the ICoqElement trait
Turned the Coq model implementation classes into case classes

This will serve as a way of grouping "equal" model handles together, at
least until something better comes along
Added a shared model-wide cache to ICoqModel and CoqModelImpl

Together with the last few commits, this paves the way for Java model-style
behaviour: model elements will become simple handles, with the actual data
being kept safely in the model itself
Added a new interface for objects in the Coq model's cache

Cached objects are now required to be able to update and destroy themselves
Use the new shared model cache to store parsed _CoqProject files
Use the new shared model cache to store a project's load path providers

As an experiment, these are derived directly from another entry in the
cache
Added a utility method for converting Eclipse resources into ICoqElements

This method can only produce ICoqProjects at the moment, but -- as they're
the only model object actually being used -- that's fine for now
Invalidate cache entries when their model objects' resources change

The CoqModelImpl.WorkspaceListener class will eventually serve as a more
complete bridge between Eclipse changes and Coq model changes, but this is
still a useful start
Improved the prototype of the LoadPathConfigurationPage user interface

All three tabs are now implemented, and the layout is more similar to that
of the Java class path configuration page
Removed some leftover debugging code from the ICache trait

This commit also adjusts the trait's documentation to make the duties of
the update(IResourceChangeEvent) method clearer