major change...

Re-queuing of events added in case where event condition is not meet.
Now Thread.sleep should not be used to wait for specific events to
interrupt, instead, state remains until event is handled and changes
state, hence delays and other conditionals are achieved via re-queing.