Type conv cow

Hacky support for [cow](http://www.openmirage.org/wiki/cow)

The diffs looks big but the port of `sexp` was mechanical. All I did 
was remove hard coded references to sexp and wrapped it with a functor. Pardon for the (ab)use of modules, I wanted the translation to be as unobtrusive as possible to see how this change is perceived. The code could definitely use a bunch of clean up ...

Also, sexp as of right now can be supported as a "cow extension" (simply add sexp to the supported_extension list in `Cow`) but I did not include it as such since sexp's type_conv syntax is a little more elaborate and I don't think we support all of it as of now. 

I would add tests but I don't understand the testing format being used. any tips?