keep git submodules from getting stale

Summary:
Previously we were never running `git fetch` in repos that had been
downloaded as submodules. So eventually when the main repo moved forward, we
would get "not a tree" errors in the submodule. Unify the `checkout_tree` logic
in the git plugin, so that it always runs a fetch if it needs to.

Fixes https://github.com/buildinspace/peru/issues/21.

Test Plan: Add a test that fails before and passes now.

Reviewers: sean

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