Implement submitted changeset posting for Perforce.

This change implements posting for submitted changesets in Perforce. In order
to do this, we fetch the filelog between those revisions, which will give us a
list of every change to every file within those revisions. This is then
processed to accumulate changes together. At the end of this, for each file,
we'll have one of four operations: add, delete, edit, or move. Move operations
can also include edits. This is a little bit complicated to track moves within
the revision range. Just diffing the two trees would handle adds, deletes, and
edits, but not moved files.

Testing done:
* Ran unit tests
* Posted a variety of revision range changes which included all four of the
  overall change types.

Fixes bug 921

Reviewed at https://reviews.reviewboard.org/r/5196/