mark argument as const

this also fixes a compiler error on linux about passing temporary rvalue.
avoid delete of void pointer
dont explictly store list of cached scenes

The cache was able to get into a state where a scene had data in the
cache, but was not present in the base class scenes_ member.  Avoid this
issue by making derived classes responsible for reporting which scenes
are in the cache via a virtual method.
fixed comments