store sprites in _sprites instead of _cache
don't forget to truncate if _sprites is cached
cache sprite_at calls, no need to create zillions of surfaces
rename rect_to_tuple to hash_rect as we don't really care what we get