¿Cómo compila el código LINQPad?

Supongo que ni invoca csc.exe ni implementa un compilador completo, entonces, ¿cómo funciona?

Update: Gracias a Jon Skeet por el puntero al código del que fue fácil aprender.

string c = @"
public class A
{
    public static void Main(string[] args)
    {
        System.Console.WriteLine(""hello world"");
    }
}
";

CodeDomProvider compiler = new CSharpCodeProvider();

CompilerParameters parameters = new CompilerParameters();
parameters.WarningLevel = 4;
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;

CompilerResults r = compiler.CompileAssemblyFromSource(parameters, c);

Assembly a = r.CompiledAssembly;

Type[] ts = a.GetTypes();

Type t = ts[0];

object o = t.GetMethod("Main").Invoke(null, new object[] { new string[] { } });

Respuestas a la pregunta(2)

Su respuesta a la pregunta