Refactor events

I found https://github.com/FakeItEasy/FakeItEasy/pull/376 quite challenging to review, so I did it the only way I know how. I refactored the lot :grimacing:.
As you often say, this is opinionated, but I tend to avoid extending classes in this manner, as I feel it expands the API too much. We don't really want people to start enumerating the providers or clearing the thing. I know it's more convenient than having a `ConcurrentDictionary` member, though.

I don't feel strongly enough to hold up the merge, though. If my argument hasn't swayed you, I'll take it as is.