Cache results and allow sharing of a snippet

Cache results and assign a snippet id to each request,
based on the MD5 of the query.

New routes
==========
* /raw/{snippet id}: GETs the Rust source of a snippet.
* /c/{snippet id}: Shareable snippet.

/evaluate.json, /format.json and /compile.json now return the snippet
id for that request ({ result: "", id: <snippet_id>}).