Add JsHamcrest

Could someone please do a code review to spot any deficiencies or suboptimal use of TypeScript. I learned just enough to write these files, but I think I got full coverage with the tests. :)

It's not ready for merging as I have two open issues:

- Decide what to do with `Matcher` and `SelfDescribing` interfaces
- Find a better way to expose matcher functions to the global and other scopes

To expose functions like `JsHamcrest.Matchers.truth` to the global scope as `truth`, I've repeated them in the file. This may make more sense to move into a separate file because a) it can be automated by a tool and b) promoting them is optional and depends on which testing framework you use. In JsUnit for example they are copied to `JsUnitTest.Unit.Testcase.prototype` by default.