Bash (globstar) style globbing

Implement bash style filename globbing for data-files (well, bash after doing `shopt -s globstar`). Subsumes #713 #784 #1343 #1344 #1973

The plan:
* `*` can expand to a part of any file or directory but not descend into subdirectories
* `**` is the same, except that it can match any number of levels of directories (including 0). 
* `{a,b,c}` can expand into `a`, `b`, or `c`, where `a`, `b`, and `c` are globs themselves. So `{foo,*bar}` expands to "foo" or "abar" or "bbar"...
* "Literal" and glob patterns may be mixed to an unlimited extent in a single directory level. That is, `foo/**/*` is allowed, and so is `foo/**/*.hs`, and `foo/**/Test*.hs`, and `foo/**/*{Test,Spec}*.hs`.
* If a file name has one of the characters `{`, `}`, `*`, `\` in it, a backslash `\` is required to match it literally. Eg the pattern `a\\b` matches `a\b`, and the pattern `\e` is an error (because no such escape sequence exists).

Here's what I've done so far. It typechecks, but if I try to parse anything, it hangs. Any ideas?