Optimize checks for lifecycle callbacks and listeners
Do not allow duplicate lifecycle callbacks to be registered

Using the method name as a key in lifecycleCallbacks will ensure that methods are never registered (and invoked) multiple times. We'll still use the method name as the value so existing code can iterate over values in a lifecycleCallbacks event array to get method names.

Fixes #427, #474, and #695. Related to doctrine/doctrine2#903.
ClassMetadata should only invoke lifecycle callbacks on its own objects

Since each mapped document class has its own ClassMetadata, we can expect the exact class and reject inheriting classes.