Make AbstractArraySubject compatible with SubjectFactory

Change the supertype of `AbstractArraySubject<S, T>` to `Subject<S, T>`.
This enables deriving classes to the be used with `SubjectFactory`.

The old supertype (`Subject<AbstractArraySubject<S>, T>`) was not
compatible; for example, attempting to instantiate a
`SubjectFactory<PrimitiveIntArraySubject, int[]>` would be a
compile-time error due to SubjectFactory's generic constraints.

I'm not thrilled with the accompanying test; it's not clear to me how
(or whether) compile-time facts should be verified in a test suite. I'd love
to hear thoughts or ideas about that, if anyone has them.