Initial discovery refactoring for MacOS using Promises

To start the tradition with opening a PR during implementation :)

This refactoring should improve the dynamic browser discovery and avoid unnecessary work being done. Switching from async to Promises using RSVP.js.