Range support and single file output

Range support through -r and -R for bytes and differences respectively.
Multiple ranges are supported with overlapping preprocessing. Range
syntax is -r start:stop in decimal values.
Now using -D will write to a single file (from file.ext to
file_diff.ext)
Divided main to separate files for maintainability.