Fixes bug in start()

Changes start() to return the same promise if called multiple times, rather than a new resolved promise each time. This solves a problem where the callback for the first call to start() waited for its resolution as it should, but callbacks on subsequent calls fired immediately, without waiting properly.