Messages support (in case of assertion failure)

This patch adds an optional `msg` arg to all assertion methods:

    foo.should.equal(bar, 'baz didn't have an effect!');
    all.should.have.length(10, 'elements weren't added')

Because this wasn't possible for testing that properties exist:

    // doesn't work, tests that foo.bar === 'custom message'
    foo.should.have.property('bar', 'custom message')

I added a new verb called `expose` which is like `property` but doesn't take an optional value:

    foo.should.expose('bar', 'custom message')

Hat tip to @dominictarr for [pointing this out](https://github.com/visionmedia/should.js/issues/1#comment_962613).

This isn't possible for non-method assertions like `ok` and `arguments`, which is why I'd love to change those to methods as well. Haven't figured out a clean way to do that without breaking existing code or having the change be opt-in via a config, which is kinda lame. What are your thoughts on that?

I also improved the static `should.fail()` --- which was just a wrapper for the native `assert.fail()` --- to actually set the passed-in message to the error's `message` property.

Other than that, some minor code and test cleanup. Let me know if something isn't clear.

Cheers,
Aseem