base REPL loop for expressions
need to idup string expressions

- Otherwise the returned value could reference
  memory in the shared library.
skip empty input lines
make Interpreter a struct so it can remove the tmp dir
split abstractions

- Use LineInterpreter to distinguish expressions,
  statements and declarations which might
  span multiple lines.

- Declare simple Engine interface and add EchoEngine
  and DMDEngine.