make the curl plugin respect Content-Disposition

Summary:
The `Content-Disposition` header is what tells the browser what name
to give the file it's downloading. We weren't respecting that before.

Test Plan:
Create `test_curl_plugin.py`. We should probably separate other plugin
testing into more specific files too.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D38
expand README.md

Summary:
I'm fond of the tagline "maybe sometimes better than copy-paste", but we should
definitely settle on something we both like.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D22
import curl_plugin_shared with path magic to unbreak python3.2

Summary:
D38 broke the build (just for python3.2) because it imported code from
directories without `__init__.py` files. D40 tries to fix this by adding those
files, which is pretty ugly, because e.g. `resources` really shouldn't be
thought of as a Python module. This diff is an alternate fix, doing
import magic instead of adding new files.

Test Plan: Push a test branch to GitHub for Travis.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D41
fix git submodule fetch output

Summary:
As described in issue #21, when we do submodule clones, we print the
(top) parent's url instead. As part of fixing this, get rid of the git plugin's
`FetchJob` class entirely.

Test Plan: Clone https://github.com/olson-sean-k/dot-config and do a sync.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D42
Make reup update all modules by default.

Summary:
Previously we required an explicit `-a`/`--all` flag. But since
all is the most common use case, let's get rid of the flag.

Test Plan: Updated the integration test and README.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D44
require all whitespace in keys to be a single space

Summary:
Previously we were using `.split()`, which allows any mix of
whitespace characters to delimit words in a string. As we move towards more
names with whitespace (like `required fields`), it's best to make this stricter
now.

Test Plan: Tried a field with too many spaces. Got an 'unknown field' error.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D45
typo: peru reup --all --> peru reup
typo: extra word in README.md
Rewrite `export_tree` to allow deleted files.

Summary:
In issue #23 we discussed allowing peru to "overwrite" deleted
imports. As part of doing this, I wanted to rewrite `export_tree` with proper
plumbing commands. I got a great StackOverflow answer from @jthill
(http://stackoverflow.com/a/24986880/823869) that pointed me to
`git read-tree -mu`.

Test Plan:
Extend a test to make sure the deleted case is covered. Make sure it
fails without this change.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D39
pass data to plugins via environment variables

Summary: Pass parameters to plugins via environment variables.

Reviewers: jacko

Reviewed By: jacko

Differential Revision: https://phabricator.buildinspace.com/D48