Removed opportunistic lock and replaced with synchronized() statements

Regarding issue #7...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 :)