first (naive) pass at beforeAll/afterAll
share usercontext for full suite
beforeAll/afterAll can be timed out and errors are applied to all children specs
Manage spys/matchers/custom equalities for beforeAll

- Refactor expectations to take list of matchers
- Add spyRegistry to manage runnables' spies
- Add clone util

[#66789174]
Only clear resources if suite is not disabled

[#66789174]
Throw error if you define a spy outside of a runnable

[#66789174]
Throw error if you add a custom matcher or equality outside of a runnable

[#66789174]
beforeAll can have expectations and passes expectation failures to its children

[#66789174]
After all exceptions dispatch to reporter hook

- Add 'afterAllException' hook to reporter dispatch, we might want to make this more generic in the future
- Add afterAllException function to HtmlReporter

[#66789174]
Print afterAllExceptions to the console.

- Add afterAllException function to ConsoleReporter
- Print the stack traces of the errors at the end of the console output

[#67055730]
HtmlReporter shows error alerts for afterAllExceptions

-Add list of exceptions in HtmlReporter to push to on error
-Create alerts for each exception in the list (with stack trace)

[#67055688]
Deprecate suite/spec ordering hook .

- Remove parameter from env.execute()
- Remove deprecated test
- Set runnablesToRun to always start with the topSuite

[#66789174]
Fix issues with displaying error messages for afterAll (browser compatibility)

- Switch from showing error stack to showing message/description since only chrome/ff support stack
- Fallback to error.description if error.message is undefined
- Made exceptionList variable name consistent between both reporters
rename afterAllException to afterAllError

It should also handle expectation failures
Add failing specs for expectation failures in afterAll
report when an async afterAll doesn't call  in time
Extract afterAll checking from queueRunner
Update json2.js
Reports expectation failures in afterAlls

This makes the specs green and appears to work for most cases. I have a
number of concerns about the implementation and would appreciate
ideas/feedback.

- Suite#addExpecationResult infers if it is coming from an afterAll fn
  based on if the first child of the suite is finished. This assumes
  that the first child of the suite is a spec (this appears to be true
  as long as there is at least one spec in the suite)
  - Suites behave like unfinished specs. Because suites will propagate
    expectation failures to their children suites, the afterAll
    expectation reporting appears to work for suites without specs
    unless you have:
    1) An otherwise empty suite with an afterAll
    2) An afterAll'd suite whose first suite is empty (or whose first
    suite's first suite is empty (and so on))
- Changed afterAllError to afterAllEvent, so it can accommodate both
  errors and expectation failures. The reporter now receives a string
  instead of the actual error object. The loss of the object doesn't
  affect our reporters, but may be a nice-to-have for other reporters/
  the future.
- The gap between the expectations caught in Suite and QueueRunner (who
  triggers reporting via an injected callback) is an array injected into
  QR by the Suite. The array is then flushed at some point (currently
  after the attempt… functions). This works, but is a bit goofy.

[#73741654]
Move afterAll reporting into Suite since that's where they're being tracked