Add better cleanup logic to base task specs.
Cleanup the output

Those stack traces are pretty much useless.
Add FileTarget for creating files.

This is a target whose success or failure is determined by whether
a specified file exists.

In the future we should use this as a base for things like
CProgramTarget, and add support for checking if the source files
are newer than the output file.

closes #23