refactor for nicer getVersion abstraction
removing old main methods

it's not a good idea to run subsystems independent
of the main Frontend class, since options are not
parsed and preserved. Instead we would use plenty
of boilerplate code for default options or debugging
code
redesign of the lexer interface

The lexer no longer returns a list of tokens but a conditional
lexing result (part of which can be conditional errors and success
 consisting of a tokenlist)

At the same time, main classes have been renamed and merged
to avoid multiple frontend classes with different behavior.
Now tests and real executions go through the same look requesting
and processing tokens, but tests use empty option objects.

For that purpose LexerOptions was generalized to allow lexing
from arbitrary sources, not just files.

The signature changes have rippling effects throughout many tests
and Frontend classes
adjust testing infrastructure to support partial lexer failures
refining error handling
fix remaining test cases
fix lexer changes in tests
slightly changed frontend output to indicate phases
fix to use the BDD library JDD to avoid error messages