Add a class to compare .dll files for *real* changes

... i.e. *not* the time stamp nor the .pdb GUID.

The problem is that recompiling *identical* code on Windows does not
result in byte-identical .dll files. The reason is that the .dll file
format *defines* time stamps to be part of the format. Even without
timestamps, there is another problem: disregarding the debug option,
Microsoft Visual C compiler still incorporates .pdb information, always,
including a Global Unified IDentifier that changes *every single time*
source code is compiled.

The DllFile class is designed to analyze .dll files and determine
whether they contain *functional* changes as opposed to circumstantial
ones, such as time stamps or GUIDs.

We need this functionality to be able to avoid uploading "different"
files every night when uploading Micro-Manager's nightly build.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Add example .dll files for the upcoming DllFile test

The empty.dll file was generated by

	: > empty.c
	gcc -s -o shared empty.dll empty.c

and recompiled.dll was generated by recompiling at a later time.

The original plan was to adjust the time date stamps with PE Explorer's
trial version's Tools>TimeDateStamp Adjuster to the kick-off time of one
of the most exciting games in the past few years.

However, PE Explorer is a little bit too overzealous and does more than
just adjusting the time date stamp: in this developer's tests, it added
a BSS section!

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>

squash! Add example .dll files for the upcoming DllFile test

Mention PE Explorer being too overzealous

squash! Add example .dll files for the upcoming DllFile test

Mention PE Explorer being too overzealous
Verify that the DllFile class correctly compares real .dll files

When recompiling an empty .c file into a .dll, it is a pretty surprising
thing for the unsuspecting developer that the result is not byte-wise
identical. The reason is that several time date stamps are part of the
.dll file format, and that there is a checksum, too, that changes with
the time date stamps, too.

To handle such cases, we just added a class to compare .dll files and
report whether they are functionally identical.

This commit adds a unit test.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
DllFile: compare against a URLConnection, not a File

This makes it more convenient for the intended use case: to compare .dll files against the current version on the update site.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Introduce the 'revert-unreal-changes' command

When .dll files are recompiled, their checksums change. We would like
to revert those changes, and only those changes, when uploading, say,
the Micro-Manager nightly build.

This command handles .dll files for the moment, but the idea is to
be able to handle all kinds of 'unreal' file changes in the future,
via plugins.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Updater (cmd-line): restrict output to 79 columns/line

This helps challenged (and challenging) platforms such as Windows,
where writing the last character of the line *automatically* wraps
around to the next line.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
When moving .dll files out of the way, treat them like .exe files

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Merge branch 'modified-dlls' into 'downgrade'

The whole purpose of the 'downgrade' branch is to test the
'modified-dlls' branch, i.e. the new command to revert timestamp
only changes to .dll files when they are simply recompiled from
the same source code.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>