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
@austinsmorris calling your attention to this new, scrutinized and psr2-ified PR. same question as before? any thoughts on this?