Allow the evaluate end-point to separate output from compiler

vs. program.

Specifying separate_output=1 in an evaluate request will mean the return
value is then `{ "rustc": <output of the compiler>, "program": <output
of the program> }`.
(This does rely on the compiler never synthesizing two strings into a single one, where this synthesized string can appear in the output. I'm not 100% sure this is true in the presence of macros like `concat!`.)