Currently, the visit promise is not entangled with the timeout at all, and the timeout is used to set the result.error object. Instead, we should refactor so that when the timeout expires the current visit is "canceled" (essentially calling .destroy() on the underlying ember application that is being booted/visited) and reject the visit promise.