migrate: add OptionParser groups, display help

Options groups are functional even without `parser.add_option_group()`
but they won't be explained in '--help' that way.
migrate: add numeric accounting for patches

When given 'Patch4:' , previous code would rely on the string
value of "4" and thus fail to resolve '%patch04 ...'
migrate: strip directory part of sources

Sources are all laid flat in %{_sourcedir}, but they can be given
as full URLs in the spec.
migrate: commented-out patches shall reset comments counter

In order to have some meaningful description for applied patches,
we try to read the comment lines before them. However, if those
comment lines are for a now-inactive patch, comments shall be
discarded.
migrate: improve condition for RPM variables

For a variable like `%{var}` the regex would break `%` from `var`.
Put a non-capturing group around symbol and string brackets.
migrate: resolve RPM conditionals

Some conditionals, like `%{?srcver:-%{srcver}}` , do participate in
the "Source:" line or the "Version:" , so we have to expand them
migrate: take patch preparation out of conditional loop

These lines of code will become more, need to be reused, so break
them into a separate function.
migrate: implement the `%apply_patches` preparation macro

It is used in all modern Mageia packages, we can implement it in
Python quite well.
migrate: use zero fuzziness when applying patches

This is what rpm's macros do, they would not tolerate a fuzzy patch.
migrate: auto-detect patches, apply git ones with full info

Some patches may come from "git format-patch" or even "git log",
thus containing rich info about original commit. In such a case,
prefer to use 'git am' or read that info and push it in commit.
migrate: fix typo in debug message
migrate: print an info line after a migrator has finished

At the end, I need to pick that temporary directory and add it to
my builds collection.