Initial implementation of `gulp` and `expectorate` from Chapter 6 of 'Programming Clojure'
Extract `make-reader` and `make-writer` functions
Horrific first version of implementing support for multiple reader / writer types.  Subsequent iterations will improve this...
Refactor to use protocols properly