Bootstraped an event system. Not thread-safe yet.
Temporary fix for the smartpointers polymorphism to work. Some small hacks had to be done.

The = operator and the copy constructor now received a templateized smartpointer.
This caused a few changes to be made internally:
1) Object has been pulled out of the reference counter.
2) Proxy object now receives both the reference counter and the object in the constructor.
3) The mutex is still part of the reference counter.
4) Because the mutex is part of the reference counter, a weird thing could occur
when trying to destroy the reference counter. The reference counter now can no longer
delete the object. Thus deleting the reference counter and the object had to be done
separately in a thread safe environment. The first idea would be do to this:
proxy = Proxy(object, counter)
delete proxy->object
delete proxy->counter

However this is wrong because when the proxy is being destroyed it tries to
unlock the counter mutex, but the mutex has already been deleted. The solution
was that now when the proxy is being destroyed it checks if the reference count
reached 0 and if it did it deletes the object and the counter. This assumes that
all decrease_reference_count calls are made through a proxy which is a correct
assumption.
Events now work with smartpointers.

More exactly the event listeners now should be smartpointers instead of
built-in pointers.
Events system temporary commit.

Things seem to be still buggy with the smartpointers when used with std::vector.
Fixed a bug inside the smartpointers which caused the compiler-provided copy
constructor to be called instead of the one which does the reference counting.
Merge branch 'master' of github.com:tiberiu/CarMoba into events

Conflicts:
	CarMoba.xcodeproj/project.pbxproj
	CarMoba/main.cpp
Merge pull request #7 from tiberiu/events

Events