Fix properties with `undefined` value pass property assertion

I was doing some interface assertions and noticed that properties that have a value of `undefined` assert as not existing. This is an initial hack at how I think this could be resolved. I just wanted to get this up and get some suggestions and comments to tighten this up.

    var obj = { foo: undefined };
    Object.defineProperty(obj, 'bar', {
        get: function() { }
    });
    // These both assert without this change
    obj.should.have.property('foo');
    obj.should.have.property('bar');

Fixes #184 
Thanks for the feedback guys. I honestly wasn't trying to be clever, just adding functionality as I added more and more tests.

Ok, here's my plan:

* A new util function `getPropertyInfo` that returns the property info struct including whether the property actually exists or not.
* Keep `getPropertyValue` for back compat, but it can easily be implemented by calling `getPropertyInfo` to share the bulk of the code.

This will allow me to properly document the general functionality and make it available to others.

I'll take a look at the type utility you mentioned, I'm still getting introduced to the codebase.