Don't swallow exceptions within route hooks

It is bad API that the various route hooks take place in
exception-swallowing promise land; this
commit reuses the async method configured on RSVP to
escape RSVP's try-catch so that any errors synchronously
thrown from route hooks will not be swallowed and will
break in the console. Important things to note:

1) This does NOT effect the error-swallowing behavior
   of .then handlers or anything else related to promises in general;
   only the manner in which route hooks are called is changed.
   So you can, for instance, return an `RSVP.reject` to invoke
   the present-day `error` event logic, etc, but something like
   a `TypeError` or `ReferenceError` that takes place right when
   a hook is called will not be swallowed (thank the gods)
2) This is NOT (only) a kneejerk response to ergonomic frustrations
   surrounding the promise-swallowing feature of Promises/A+; it is
   just straight up unusual to provide a public API wherein only
   certain hooks are subject to an unusual and hard-to-explain
   rulebook of error-swallowing.

Also, I backburner-ified the test suite to flatten things out and
make it possible to write comprehensible test cases. Some of the
test case-reworking became untenable during this PR so it made sense.