PhraseSession: flesh out timing calculation
PhraseSession: hookup result change to session cache clear / change event
PhraseResult: fix nuance in data set order
evented: emit change in setData
Evented: return event from addEvent
ui: factor Input.reset out of app
Match: add Atom.oneOf
PhraseResult: factor out getOptions
PhraseResult: rename finish => done
PhraseResult: factor out doneAt in score
PhraseResult: vary the done event
app: use timeouts off eng.session
app: rename record => result
app: factor out finishResult
app: add clearResult
app: trivial refactor
app: trivial refactor
Input: factor out finish method
Input: add done state so that finish can only happen once
Input: differentiate between data and done events