In 6 different places in the AggregateResult test, a query is issued against FullTimeEmployee and returns an aggregate on "manager.salary". However, the "manager" field is of type Employee, and the "salary" field is only defined in the FullTimeEmployee subclass of Employee, thus rendering the aggregate statement invalid.
The solution is to replace all instances of "manager.salary" with a clause that casts "manager" down to "FullTimeEmployee". E.g.: "(((FullTimeEmployee)manager).salary)"