Rid of dirty hacks with void*

use forward declarations.
also prepared generic object to store and be a light source