Add AccumStream
extract: trivial cleanup
extract: factor out sentenceStream
extract: skip commas in sentences
Move sentenceStream into its own module
markov: test through addTokens only
test/lib/markov: refactor test harness
test: pull out generic object test harness
markov: inline addToken
markov: drop null token path
markov: inline flush
markov: drop one arg addTransition path
markov: localize buffer
markov: simplify buffer => last in addTokens
markov: use null for end token
markov: carry start on instance
markov: use singleton null as start
markov: stop taking tokens in constructor
markov: add options plumbing
markov: expect noop behavior out of empty list addTokens