ReFake: implement incremental build logic DSL

Relies on the new 'fsc' compile function.

For now, a proof-of-concept of incremental build natively within FAKE. I
re-implemented a 'target' record type ('ReTarget') to store a little
more information about each target:

  - The type of target. Can be an output file, a reference file (one
    that's passed in to the F# compiler with the '--reference:' switch),
    or a _virtual_ target (a target that always causes its dependencies
    to be built). I think it's vital to make a distinction so we can
    internally decide whether to build incrementally or not.

  - A list of dependencies of the target, which are themselves also
    targets. I felt this was important to store inside the target type
    itself to make it simpler for the build function ('reRun') to look
    up dependencies and pass them along into the build action function
    (see the tutorial for a concrete example).