Don't use exceptions in control flow when it possible

I've encountered same problems as @justwrote in #96 #97 #98 (but I did not knew about his PRs when were writing this).

Namely, problems can be noticed in heavy-write scenarios with write concern equal or stricter than "acknowledged". Because creating stack trace is a slowest part, I've tried to use general logic instead of exceptions when it possible.