differentiator: main: fix "could not compute" warning message.
differentiator: move to rational arithmetic using boost::rational<>.
differentiator: lexer: refactor, correctly determine boundaries of numeric values by parsing into cache.
differentiator: parser: handle "stray data after expression" error.