implement new events for preHydrate, postHydrate, createDocument; implement Discriminator annotation; clean up