Phase 3 was glitchy. If the VarArgs method was (int, int...) and the
invocation was (int, int[]), Phase 3 would return false even though it
should be true. This was because of faulty test cases. It was
origintally tested with (Serializable...) and (String[]), but all array
types implement Serializable, so would pass regardless of the array
types.
Created a MethodInvoker. It uses a MethodLocator to find a Method or
Constructor, then invokes it with the given arguments. The default
implementation VarArgsMethodInvoker repackages objects into arrays
(unboxing as needed) for the invocation.