matcher: switch over to bashlex for parsing (fixes #24)

bashlex is a port of GNU bash parser and supports more complicated constructs
such as process/command substitutions, variables, control flows and more.

We don't actually visit those new nodes just yet. First, make sure the existing
functionality is working.
matcher: simplify _markunparsedunknown
matcher: decode back from latin1 in the matcher rather than views
matcher: add support for command substitutions (fixes #24)

to keep things simple in the UI, we only add a link to /explain?cmd= with the
contents of the substitution (for now)
matcher: add support for process substitutions (fixes #24)
matcher: add support for if/for/while/until compound commands
index: remove note on the front page
remove old parser code
explain: don't allow newlines in the input

explainshell doesn't support multiline commands
views: catch NotImplementedError that bashlex might throw
matcher: add support for variable assignments (fixes #103)
es.js: show lines for unknowns when explaining shell only
tests: fix while/for semicolon matching
matcher: limit the recursive parsing to 1

we don't use anything beyond that in the UI anyway
matcher: visit expansions in the word after the for loop 'in' keyword
views: put the substitution links in spans

to make them easier to select in es.js
index: add examples for the new constructs
about: update
views: include the missing feature on NotImplementedError