refactor svn logic into SvnRepo

Summary: This is going to be shared with the reup test.

Reviewers: sean

Differential Revision: https://phabricator.buildinspace.com/D85
svn reup test

Reviewers: sean

Differential Revision: https://phabricator.buildinspace.com/D86
move clean tmp dir test logic to shared

Summary:
We like to confirm that no temp files are left over after our
integration tests. This refactor lets us share do this in the reup tests
too.

Test Plan:
Make sure we can fail both the reup and sync tests by deleting the
cleanup logic.

Reviewers: sean

Differential Revision: https://phabricator.buildinspace.com/D87
make sure plugin env vars are always masked

Summary:
We had code for this before, but it wasn't tested. It turns out we were
setting the literal field names ('url') instead of the formatted field
names ('PERU_MODULE_URL'). We didn't notice this before, because we
were still using `os.environ.get` for our optional fields, which doesn't
fail on a missing variable. Get rid of those calls.

Test Plan:
Now that we're using `os.environ[]` everywhere, we should notice if this
breaks.

Reviewers: sean

Differential Revision: https://phabricator.buildinspace.com/D88
don't catch PrintableError when verbose

Summary: Closes issue #35.

Reviewers: sean

Differential Revision: https://phabricator.buildinspace.com/D84
delete compat.indent()

Summary: That was a python3.2 compatibility function. Now we're only >=3.3.

Test Plan: Ran `test.sh` inside a 3.3 virtualenv.

Reviewers: sean

Differential Revision: https://phabricator.buildinspace.com/D83
remove peru/plugin_shared.py from .coveragerc's omit list

Summary: That file no longer exists. (Yay!)

Reviewers: sean

Differential Revision: https://phabricator.buildinspace.com/D82
automatically sync after a reup

Summary:
In my experience I almost always follow `peru reup` with `peru sync`, so
let's make that the default. Add a `--nosync` flag to restore the old
reup-only behavior. Also add the `--force` flag to reup, to match the
options to sync.

Test Plan:
New integration test. Also clean up the existing reup tests a bit. I
also made sync respect the `--quiet` flag. That particular logic won't
last long (because fancy output is coming), but it keeps our test output
clean.

Reviewers: sean

Differential Revision: https://phabricator.buildinspace.com/D81
[RFC] move reup output to PERU_REUP_OUTPUT

Summary:
Previously we've allowed plugin fetches to print directly to stdout, but
used the stdout of reup to get the actual reup data. This is kind of
inconsistent, and with the upcoming fancy console display, we're going
to want reup to print progress to stdout the same way fetch does. We'll
need a different channel for reup's actual data output.

Create the `PERU_REUP_OUTPUT` variable, which is defined during reup to
point to a temporary file where the plugin should write its
YAML-formatted result. Conceptually this is similar to the
`PERU_FETCH_DEST` variable already used for output during a fetch.

For now, discard the stdout from reup but allow the stderr to print to
the terminal. In the future, we'll do the same thing with stdout here
that we do in a fetch.

Reviewers: sean

Differential Revision: https://phabricator.buildinspace.com/D89
FANCY DISPLAY!!!

work in progress
enter and exit for handles
move job slot logic into FancyJobDisplay
flicker-free drawing with delay
unicode line starters
shrink the display as jobs finish
keep track of outstanding handles to avoid flicker for -j1