Fixes a set of correctness defects in argument matching, structural comparison and stub state, and raises test coverage substantially.
Argument.anything no longer fails to match itself, and a recorded .closure sentinel is now matched by .closure rather than falling through to a runtime closure check. In the macro plugin, throws now generates try spryifyThrows instead of rethrows, class members are recognised as static, private and fileprivate members are skipped, and duplicate generated case names are rejected with a diagnostic instead of producing uncompilable code.
Structural comparison gained a recursion guard: reference cycles are detected by tracking in-progress object pairs, and depth is capped at 100 for comparison and 30 for the diff renderer, so a cyclic or deeply nested graph reports a clear failure instead of exhausting the stack. Nested optionals compared a value against itself, which made a nil field behave as a wildcard in spy matching; that is fixed. diffMirror no longer returns a single empty line for equal values.
StubInfo now holds all mutable state behind a single atomic value and fires the completion handler outside the lock. ArgumentCaptor.getValue reads the captured array out of the lock before trapping, which previously left the lock held process-wide because an Objective-C unwind skips Swift cleanups.
Adds Spry.resetAll() for clearing recorded calls and stubs across all spies and stubs.
Dependencies: Threading 2.3.4.