Refactor of WrapperTask to avoid repated complete() calls

Instead uses the in-memory mock file system in MockFile to keep state
and rely on luigi's task execution order to assume task completeness
of dependencies
Do you mean memoization of the wrapperstask's complete() method or the wrapped tasks?

I thought a bit about using a more de-facto method memoization, but didn't find a simpler way to get around some of the issues with it:
* tricky to do cross worker processes
* want to avoid having both the wrappertask and the subtasks check completeness, but want the tasks themselves to check their completeness (just) before they run to verify that they need to
* how should the memoized state be invalidated? this isn't really solved in this patch either, but I think it should be reset to False on every "scheduling" instance and then set to True once all deps exist.

I thought MockFile would be a simple way of implementing it since it solves the cross-process sync etc., but I might be wrong because of complications with the range-stuff... The proper fix would probably be to make WrapperTasks (or more general task grouping) a core concept of the scheduler. 

I'll see if I can make this patch work for now, as a quick fix for the slow scheduling of wrapped tasks.