Revise error message handling. Fixes #34.

This started by wanting to fix #34, then cascaded into some related
changes and fixes.

- Don't depend on `source-location->string`, because it doesn't always
  give the fully-qualified pathnames that we need for Emacs'
  compilation-mode.

- Don't assume Racket 6.0 and that its new `current-directory-for-user`
  parameter is defined.

- Although we can avoid using `source-location->string` when printing
  the context, we don't control how the exn-message has been formatted.
  As a result, we have to look in the already-formatted message for
  non-qualified paths and stuff like <collects> and <pkgs>, and replace
  them with actual full paths.

- Fix the attempt to exclude certain system files from the context.
  Although it worked originally, it had gotten broken in a previous
  commit.

TL;DR: Error messages are messy.

This was tested with both Racket 5.3.5 and 6.0.1.10.