Find binary using the registry on Windows

- As a side effect, normalizeBinary() now returns a promise instead of
  a string
- Change runner to adapt to normalizeBinary() being async
- Add tests and change old tests
- Fallback to reading env var when registry access fails

Closes #125
actually I don't see any need for this `master` promise variable.

This line can just be:

    return normalizeBinary(options.binary).then(function(path) {  
      binary = path;
      profileDeferred.promise.then(handleProfile);
    }).then(function handleProfile (profile) { /*...*/ return runDeferred.promise;  });