Replace observers with callbacks

Hey guys, finally I found time to do it. What do you think about it?
Because options could be `nil` by default. To make it working this way we have to set default value as `{}` and in order to reset it end user (and we in tests for example) has to set this option as `{}` which is not convenient by my opinion. It's more clear and easier to set it as `nil` without thinking also by my opinion. That's the point.