Fix order of execution for setup and tear down functions, and bind suite scope properly

This should be a **SIGNIFICANT** improvement to scope. This removes the need to `array_unshift` functions onto setup and tear down collections. 

Scope is now passed from suites to specs via child scopes, thus allowing tear down and set up functions to run in order.

Suites now use the default `addSetupFunction` and `addTearDownFunction` methods, and binds to them instead of just forwarding them to tests.

This kills 2 birds with one stone.

fixes #96 and fixes #91
This method was the target of the fix. Passing scopes down the chain is a much more sane way of passing state.