Convert this into a more fully-fledged merged tool.

This currently works in two passes:
* collect pass which collects information about all the commits.
  this stores the fast-exports in temporary files
* weave pass which reads from the temporary files and weaves the commits
  together in the order determined by the collect pass

It requires a patch to `git_fast_filter` to allow resetting of IDs
Allow overriding the id_offset - for example, when re-reading the same commit file (use with caution!)
Keep `git fast-export` output on failure
Consistent 4-spacing
More storing of the output results if it doesn't work, and do an intermediate file between the weaving and importing
Factored out temporary file handling into separate class, and made what files are preserved on error more logical
Handle dependencies from one branch onto another
Don't try to read in the whole file to be imported; rather allow `fast_import_input` to read from a file
Add some TODOs
Don't try to read in the whole file to be imported; rather allow `fast_import_input` to read from a file
Add some TODOs
Set up the ability to pass command-line branch rename arguments (these need to be of the form `refs/old_name=refs/new_name`)
Added support for renaming files and directories
Added some logging
Added comments and logging and rearranged order of method definitions to match order usage
Reverse order of commit tracking to go from the branch up the tree, rather than just looking at the branch label - otherwise we lose the parent of the start of the branch
Find the parents of branches, and hope that they're related to each other (by marriage)
Use `changed_parents` info when calculating dependencies
Some more handling of finding parents - don't look for `depends_on` if it doesn't exist
Added some basic argument parsing
Factor out collect_commits
Don't promise what can't be done in command-line help
More method extractions
Factor out error handling for stores
Handle numbers of input repositories other than two better (and stop repeating everything twice)
Allow specifying temporary directory (which can save time moving files across file systems in the event of failure)
Allow intermediate files to be kept and reused by giving a label instead of the unique temporary name generation
Move more of the logic about handling intermediate files into the wrapper class
Make a `.json` file for remembering commits, so we don't have to repeatedly export and parse the original file when debugging.
Add helper bits for dates and json