Preliminary support for error reflection

Error reflection allows Idris errors to be decorated by user code. This has at least the following potential uses:
 * Nice error messages for embedded DSLs
 * Improving confusing special cases of errors in the stdlib and suggesting how to fix them

See test/test037 for an example of their use.