Switch tests to use Mocha

This pull request fixes #197, should you chose to merge it.

Looks like there may be a small problem with should.js, as with #160 `(function(){}).should.be.a('function')` fails because `.should.be` is an object instead of a function, but this works if you replace it with `(function(){}).should.be.a.Function`. This is fixed here, but I don't know why it would be a problem to begin with.

All socket tests were merged into test/socket.js, for better or for worse, but can be split back up into individual files if useful. This gave the mocha spec reporter better grouping than having related tests in separate files.