support for lazy-evaluated variables

Hi,

I know there were other attempts, such as pull-request #101. I believe this new suggestion is closer to the expected implementation. Please consider the specifications to validate the suggested uses.

Example:
```javascript
describe('first level tests', function() {
  given('foo', function() { return "bar"; });
  given('subject', function() { return {"foo": given.foo}; });

  it('should call nested lazy-evaluated variables', function() {
    expect(given.subject.foo).toBe(given.foo);
    expect(given.foo).toBe("bar");
  });

  describe('second level tests', function() {
    given('foo', function() { return "rab"; });

    it('should change the value of foo', function() {
      expect(given.subject.foo).toBe(given.foo);
      expect(given.foo).toBe("rab");
    });
  });

});
```
This mechanism is similar to RSpec "let" helper ([here some advantages of this feature](http://www.verious.com/qa/when-to-use-rspec-let/)).