test_introducer.SystemTest: fix race condition

SystemTest has a couple of different phases, separated by a poller which
waits for everything to be idle (all messages delivered, none in flight). It
does this by watching some internal "_debug_outstanding" counters in the
server and in each client, and waiting for them to hit zero.

Just before the last phase, we replace the server with a new one (to make
sure clients re-send their messages properly). Unfortunately, the polling
function closed over the variable holding the original server, and didn't see
the replacement. It kept polling the old server, and failed to notice the
outstanding messages for the new server. The last phase of the test (check3)
was started too early, which failed (since some messages had not yet been
delivered), and then exploded in a flurry of dirty-reactor errors (because
some messages were delivered after test shutdown).

This replaces the closed-over-variable with a "self.the_introducer", which
seems to fix the race.

One additional place to look at in the future: the client
announcement-receive path (remote_announce) uses an eventually(). If the
message has been received and the eventual-send posted (but not yet executed)
when the poller sees it, the poller might erroneously conclude that the
client is idle and cause the same problem as above. To fix this, the poller
(probably all pollers) could be enhanced to do a flushEventualQueue before
querying the are-we-done-yet predicate function.
fix ftpd mtime retrieval
unit test for ftpd LIST
ftpd file `size' attribute must be an integer
FTP-and-SFTP.rst: directories containing mutable files should now be listable via FTP. refs #680
test_ftp.py: fix a couple of unused imports. refs #1668
FTP-and-SFTP.rst: there were two more instances of 'rootcap'. Also made the wording tweak from ticket:1487#comment:4 . fixes #1487
Add test for bug #1689: repairing empty file hits no-privkey assertion
Mutable repair: use new MODE_REPAIR to query all servers *and* get privkey

This fixes bug #1689. Repair was using MODE_READ to build the servermap,
which doesn't try hard enough to grab the privkey, and also doesn't guarantee
sending queries to all servers. This patch adds a new MODE_REPAIR which does
both, and does a separate, distinct mapupdate to start wth repair cycle,
instead of relying upon the (MODE_CHECK) mapupdate leftover from the
filecheck that triggered the repair.
Document PYTHONPATH problem when running flogtool. refs #1693
setup: show-tool-versions: report cl only on windows, report buildslave, git, openssl, and lzip, but not 7za
mutable/layout.py: improve confusing documentation of layout. fixes #1534
node.py: tolerate a UTF-8 BOM at the start of tahoe.cfg. fixes #1470
test_node.py: test that we tolerate a UTF-8 BOM at the start of tahoe.cfg, and can read UTF-8 option values. refs #1470
Spelling error in a comment.
docs: quickstart: edits

• use out-of-line links to avoid a warning from rst2html --verbose (fixes #1704)
• reflow to 77 fill-column and prepend utf-8 BOM (fixes #1703)
• recommend Python 2.7 (fixes #1702)
• remove link to wiki:AdvancedInstall (fixes #1701)
bin/tahoe-script.template: fix the error message that is displayed when a runner script cannot be found. fixes #1488
misc/build_helpers/show-tool-versions.py: s/print_stderr/print_stdout/
interfaces.py: ensure that NoSuchChildError can be converted to str even when it is for a non-ASCII name. fixes #1483
docs: FTP-and-SFTP.rst: recommend SFTP

Add an explicit recommendation of SFTP over FTP. Separate the known issues of
FTP from SFTP. List "SFTP" first in all lists of the two. Use unicode bullet
points and prepend a utf-8 BOM. Use out-of-line rst hyperlinks.