support for promises as task return value

I cherry-picked the changes needed to support promises in Jake.  I believe these changes are good to go.  I can't be sure though as I haven't been able to run the tests against this branch.  My hope is that if you pull this branch locally they tests should run fine on your machine.

The changes are much more limited, so it should be easier to review.