Refactored away the "Visitor Pattern"

Visitor Pattern was probably not appropriate here. The current implementation feels more Object-Oriented, placing responsibility on the Effects to resolve themselves, decentralizing the code from the Engine. The Engine is passed to Effects for cases when they must immediately trigger more Effects in response.

All the current JUnit tests were passed after the refactor.