Make graduate.sh commit filtering more correct

Current version of graduate.sh have a series of drawbacks:
a) it rebases all commits to one straight line, which not only isn't
correct from history pov but also can introduce merge conflicts during
rebase (suggesting to finish script's work by hand);
b) it loses Comitter and Commit Date info overwriting it with Author and
Author Date correspondingly;
c) it runs expensive git-filter-branch 3 times with 3 different filtes
while it can handle them all at once.

This commit introduces following changes:
a) 3 filters are applied by git-filter-branch at once;
b) proper detection of all roots of files we need to keep (there can be
more than one);
c) keeping all commits along with their merge commits in order they were
in original repo;
d) as a side effect of doing all dirty work in filter-branch, all
metadata in commits is saved, and different runs of the script with the
same initial data provide the exact same results (all hashes are the
same).

Change-Id: I7313c36b41fa92b81432d33290b7efd960e6cca6
Merge "Make graduate.sh commit filtering more correct"