Collect the coqtop input and output streams in a safer manner

It turns out Scala actually runs the ProcessIO functions in separate
background threads, so explicit synchronization is necessary to guarantee
that the streams are actually ready. This was causing problems on Windows
Implemented some more bits of the Coq builder
Changed the return type of the ICoqLoadPath.path method

The path method now returns an IPath instead of a plain String
Commented out the ideslave communication debugging messages

The ideslave communication seems to be quite reliable now, so these
messages are just getting in the way
Added dependency resolution and compilation to the builder

This is still slightly too brittle (and it makes no attempt to put the
resulting .vo files in the right place), but it's an excellent start
Removed the manual implementations of the Function1 trait

This commit also tweaks the way the project builder creates and invokes
progress monitors
Don't explicitly add the Coq standard library to the builder's load path
Fixed a bug in the builder's failure count tracking code

Thanks to this change, the builder is now actually capable of completing
compilation tasks
Always try to fix files with broken dependencies when running a build
Added error marker deletion and creation to the builder
Changed the data structure used to represent dependencies

Dependencies now consist of an identifier, a function that can try to
translate that identifier into a path, and an optional path. This makes it
possible to drop paths without having to re-parse the entire file
Made some of the CoqModel return types more helpful
Instantiate builders' coqtop instances in a more sensible way

coqtop instances are now associated with the builder rather than with its
nested DependencyGraph companion object
Don't hard-code the load paths in CoqCompileRunner

This commit also tidies up the code a bit by making it unnecessary to
override the coqc working directory