Make OccupiedCells implementations return arrays.

Since there are only one or two items, it's cheaper to return a concrete collection and avoid the overhead of the compiler generated state machine.

This in particular speeds up Shroud.GetVisOrigins when dealing with Mobile.OccupiedCells, as the expensive CanEnterCell call is made only once rather than twice.