Added NegativeEvent class and added == and !=

operators to the base Event class and added some
test case to ensure that this will work as intended.
Also changed some of the unique_ptr's to shared_ptr's
for events and fixed some of the test cases for that.