web_config: use only Python 3-style (Unicode) string literals

Improves Python 2/3 compatibility.
(It is the distant future, the year TWO THOUSAND.)
web_config: further python2/3 unification
Mark unknown versions as unknown.
Change how arrays and environment variables interact.

Prior to this change, inherited environment variables
would be split on colons, becoming an array. This change
eliminates that behavior. Now environment variables are
always split on the record separator character (ASCII 0x1e),
with the exception of a short whitelist of PATH, MANPATH,
CDPATH. Likewise, exported variables are also exported
delimited by rs, with the exception of the above whitelist.

Fixes #1374, also see #1656
Report certain errors from parser_t::eval() that were previously ignored
Standardize unmatched wildcard errors

Unmatched wildcard errors during parsing are normally only reported when
run interactively. The switch command was unconditionally reporting them
anyway (and not setting the status to 124). Fix it so switch goes
through the same code path as everything else.
Suppress wildcard errors in functions

Wildcard errors are only supposed to reported when encountered during
interactive use. The old parser also suppressed them if `is_block` was
true. This was lost in the new parser. However, this also suppresses
errors generated from `begin; code_here; end` and other block
constructs.

Instead, check the parser block stack when we hit an error, and suppress
the error if there are any function calls / events / source invocations.
These all indicate that the code being executed came from somewhere
other than the commandline.
Remove some obsolete job flags

These flags were used by the old parser, but not by the new one.
Don't stop job execution on wildcard errors

Wildcard errors are only reported interactively, and they're also not
really errors. Commands with multiple wildcards would in fact continue
executing if at least one wildcard matched, which is quite surprising.
But they would report an error if there is only one wildcard in the
arguments list and the wildcard has no match, even if there are other
remaining arguments.

Given this inconsistency, and given that sh does not stop execution if a
wildcard fails to match, it seems better to allow execution to continue.
This is better from a scripting perspective anyway, as it means
constructs like `set -l paths foo/*.txt` will actually create the
variable (with an empty value) instead of skipping the `set`
altogether and perhaps causing subsequent code to read or modify a
global or universal variable.
Run `make depend`
Improve error reporting for unclosed blocks
Use binary search to determine what tokens are keywords
Remove EXPAND_SKIP_PROCESS, which did not actually work
Unescape strings in keyword detection.

This allows keywords to be quoted. However, they may not contain
variable or process expansions, etc. Fixes #1398