Make sure that annotation proxies use the correct class loader

We cannot assume that the class loader that loaded the annotation
knows about all of the annotation's fields' types.

For example, when an annotation type contains a field of type Class, a
particular annotation could reference a Class object unknown to the
class loader that defined the annotation type.

In other words, if the annotation looks like this:

	public @interface HasType {
		Class type();
	}

and is loaded by class loader A, and another class loader B (that has A
as parent) knows a class defined like this:

	@HasType(ABC.class)
	public class ABC {
		...
	}

then class loader A cannot see ABC and should therefore not be used to
construct a Proxy for the @HasType(ABC.class) annotation.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Prepare for integration tests

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Add an integration test for funny class loader issues, part 1

This adds a base class and annotation, and a class to use SezPoz to
discover all available implementations on the classpath.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Add an integration test for funny class loader issues, part 2

This adds a separate implementation of the base class.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Add an integration test for funny class loader issues, part 3

This tests that loading the implementation in a different class loader
than the annotation or base class works.

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