Former version using persistent data structure and head-tail idiom of LISP. This version changes the internal implementation to java.io.Reader
performance increase. We also use transient
feature of Clojure to mutate the tokens in the recursive tokenization routine.