Moved testSubject dependency from environment build to envionment isolation

It makes much more sense to isolate environment according to test subject rather than building
it with one. Basically, environment building is done using suite only, because it makes sense.
Environments are logical continuations of suite, but could be isolated for specific subject.
Group test subjects by suite before iterating over them

Limit amount of times suite events are called. Before that, depending on how loaders work,
single suite before and after events could've been fired multiple times. From this point on,
all subjects are grouped before being passed to SuiteTester.
Make SuiteTested a LifecycleEvent
Renamed ExerciseTester into an Exercise

Just to mark much higher domain relevance of this service
Suite hooks are back

Now as we know that suite will be tested only once, we can safely dispatch suite hooks
Renamed ExerciseTested to ExerciseCompleted as now we're running Exercise, not testing it
Simplified static hook callback checks
Fixed bug on PHP 5.3
Made Suite a mandatory argument of GroupedSubjects
Made skipping logic more obvious
Clarified variable names in GroupedSubjects::group()
Removed unneeded array initialization from GroupedSubjects::group()
Renamed Subjects into SubjectIterator and SubjectsLoader to IteratorFactory
Renamed local SubjectLocator ivars to follow new logic
Fixed Subjects => SubjectIterator refactoring leftovers
Merge branch '3.0' into feature/suite-hooks
Moved subject iterators back to the root of Subject namespace
Clarified code by renaming some variables in GroupedSubjectIterator
Moved paths parsing and filter loading responsibility to Subject namespace
Renamed SubjectLocator into SubjectFinder and SubjectIteratorFactory to SubjectLocator