The documentation lists exceptional conditions and the exceptions that
should be thrown, but doesn't say which exception previals when two or
more exceptional conditions exist at the same time.  For example,
attempting to set a protected field from an unrelated class causes an
IllegalAccessException, while passing in a data type that doesn't match
the field causes an IllegalArgumentException.  If code does both at the
same time, we can only throw one or the other.

This exercises the various failure modes to ensure that behavior is
equivalent, and not merely spec-compliant.