Add Kernel object and make it available for interpreter

As per our discussion, this makes available an instance of the Kernel API - currently just the interpreter - for code execution to utilize.

This includes a second Scala interpreter that ties into the existing SparkIMain so code can be executed inside the interpreter (the TaskManager is serial, which is why this is done).

Future plans are to refactor magics as part of the kernel instance.