The main REPL related classes and values are as follows.
In addition to standard compiler classes Global and Settings, there are:

History: an interface for session history.
Completion: an interface for tab completion.
ILoop (formerly InterpreterLoop): The umbrella class for a session.
IMain (formerly Interpreter): Handles the evolving state of the session
and handles submitting code to the compiler and handling the output.
InteractiveReader: how ILoop obtains input.
History: an interface for session history.
Completion: an interface for tab completion.
Power: a repository for more advanced/experimental features.

Tries to create a jline.InteractiveReader, falling back to SimpleReader,
unless settings or properties are such that it should start with SimpleReader.

Tries to create a jline.InteractiveReader, falling back to SimpleReader,
unless settings or properties are such that it should start with SimpleReader.
The constructor of the InteractiveReader must take a Completion strategy,
supplied as a () => Completion; the Completion object provides a concrete Completer.

Interpret expressions starting with the first line.
Read lines until a complete compilation unit is available
or until a syntax error has been seen. If a full unit is
read, go ahead and interpret it. Return the full string
to be recorded for replay, if any.

Adds jar file to the current classpath. Jar will only be added if it
does not contain classes that already exist on the current classpath.

Importantly, require adds jars to the classpath without resetting
the state of the interpreter. This is in contrast to replay which can
be used to add jars to the classpath and which creates a new instance of
the interpreter and replays all interpreter expressions.

XXX right now this gets import x._ and import java.lang.String._,
but doesn't figure out import String._. There's a lot of ad hoc
scope twiddling which should be swept away in favor of digging
into the compiler scopes.

If path represents a class resource in the default package,
see if the corresponding symbol has a class file that is a REPL artifact
residing at a different resource path.

If path represents a class resource in the default package,
see if the corresponding symbol has a class file that is a REPL artifact
residing at a different resource path. Translate X.class to $line3/$read$$iw$$iw$X.class.

It's a bit of a shotgun approach, but for now we will gain in
robustness.

It's a bit of a shotgun approach, but for now we will gain in
robustness. Try a symbol-producing operation at phase typer, and
if that is NoSymbol, try again at phase flatten. I'll be able to
lose this and run only from exitingTyper as soon as I figure out
exactly where a flat name is sneaking in when calculating imports.