Removed opportunistic lock and replaced with synchronized() statements

Not sure if this was the best way to solve what was going on, but there seemed like there was contention over that lock. I think I get what was trying to be done with the locks, but might @synchronized() do just about the same thing...and if it didn't wouldn't it be in a more extreme situation...like when multiple async methods were being fired from a single test class?

If there is a better way to solve this, let's discuss...my fix doesn't have to be the one especially if it causes problems for existing tests. But, I am unable to write tests with block notifications. Let me know what you think. Thanks for the awesome library :)