Add nice unhandled-rejection tracking API as per #265.

- Closes #244 and closes #245 since `Q.stopUnhandledRejectionTracking()` removes the `process.on("exit", ...)` handler.
- Closes #255 since `Q.stopUnhandledRejectionTracking()` prevents any storage or tracking of unhandled rejections or unhandled rejection reasons.
- Closes #265 via the new `Q.getUnhandledReasons()` and `Q.resetUnhandledRejections()` APIs, which are useful mainly for testing and diagnostics.
- Closes #278 by slightly reordering the code inside `trackRejection`.