match(): fully support backslash escaping
match(): fully support backslash escaping

bin/modernish:
- Unban and support backslashes, implementing a workaround on shells that
  require it. With this commit, match() should now have consistent behaviour
  on all supported shells while supporting backslash escaping in patterns.

  It is desirable to support the escaping of wildcard/globbing
  characters ('?', '*', '[') using backslashes in patterns. Patterns
  are passed to a 'case' construct from a parameter.

  Unfortunately, many shells don't properly support passing a glob pattern
  with backslash-escaped characters from a parameter. But the behaviour with
  patterns as string literals is the same on all shells. To ensure
  portability, we must use 'eval' to parse patterns containing backslashes
  as string literals. This involves backslash-quoting the pattern in a
  special way to make it safe for 'eval' while preserving already-quoted
  characters and avoiding quoting glob pattern characters '?', '*' and '['.

  With this method, the only portability issue left is a final single
  backslash in the pattern. Shells vary. POSIX says: "If a pattern ends with
  an unescaped <backslash>, it is unspecified whether the pattern does not
  match anything or the pattern is treated as invalid." In fact, some shells
  do neither and match it as if it were an escaped backslash. To ensure the
  same behaviour on all shells, specifically check for a dangling final
  backslash and treat it as invalid by returning exit status 2.

  Ref.: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13_01

modernish/modernish