voteview: parse related bill info
fdsys: package lastmod cache files weren't quite right

Each time a package was downloaded (--store ...) the lastmod time from
the sitemap was written to disk in lastmod.txt next to the package. But
since an invocation of the fdsys script can choose to store different
file types, we would lose track of the lastmods of some of the files if
fdsys was invoked again to --store different files.

This revises the lastmod cache strategy to store a .json file containing
the lastmod of each individual downloaded file (type), rather than for
the whole package.
'On motion that the House agree with an amendment' was not being treated like 'as amended', i.e. a ping pong vote
tidy vote action line parsing, split regex across multiple lines and sort the parts of the patterns
refactor parsing vote action lines

Merge similar regex patterns. Also fixes parsing:

    Submitted in the Senate, read twice, considered, and agreed to

which didn't quite match:

    Submitted in the Senate, considered, and agreed to
second-order ping-pong Senate votes were not parsed, and some first-order ping-pong votes because of a "the"

e.g.:

    Senate agreed to the House amendment to the Senate amendment
new bill relations parsed: causes X to be laid on the table, passed by virtue of, enrollment has been corrected by virtue of
when parsing committees out of action line text, avoid warnings in cases where it's clearly not a committee reference
improvements for my --diff command

Fast-path if output hasn't changed. Make my run script chmod'd executable.