Optional support for async beforeEach() and afterEach()

This PR implements Mocha-style optional async support in beforeEach and afterEach functions. This is extremely useful for per-test setup and teardown functions which need to perform IO. For example, creating test users or other data in order for the test to work.

If you don't accept a parameter in your *each() function, synchronous semantics are provided - so it's 100% backwards compatible with existing Dalek tests. If your *each functions accept a single argument, then async semantics are expected and you can call the callback when you are done.

Here is an example to show what it looks like:

```javascript
module.exports = {
  options: {
    beforeEach: function(done) {
      consoloe.log("beforeEach");
      done();
    },
    afterEach: function(done) {
      console.log("afterEach");
      done();
    },
  },  
  'Open Google': function(test) {
    test.open('http://google.com').done();
  }   
};    
```

Want the existing synchronous style? Doesn't require any changes:
module.exports = {
  options: {
    beforeEach: function() {
      console.log("Sync beforeEach");
    },
    afterEach: function() {
      console.log("Sync afterEach");
    },
  },  
  'Open Google': function(test) {
    test.open('http://google.com').done();
  }   
};