make SubmoduleCollection.GetEnumerator virtual

This is so it can be faked in unit tests.
meta fixture ensuring GetEnumerators are testable

fix other non-virtual GetEnumerators

the simplest thing that works

simpler still

when in Rome…