Resolved #23 and re-wrote core to follow simpler idioms, created an event dispatcher as well. Also Fixed #22 and added log4j style logging to the engine