Initial implementation and spec tests.

I could yes. I'd be happy to add Travis as a feature, I don't think it has to be done as part of this pull request though :).