Refactor recurisve module compile with promises

Refactored recursiveModuleCompile to return a promise, with some other simplifications targeting ease of understanding.

Refactored other code that uses recursiveModuleCompile to use a more natural promise style.
`then(revertCwd, revertCwd);` will swallow the underlying error, i suspect your want to rethrow it