Updated Spell class

Added cast() to allow for more varied spell types/effects via by-spell
callbacks.