Works for out of viewport elements

Many browsers are unable to capture screenshot of whole page and
capturing only viewport. In this case, we are scrolling test rect into
view before taking screenshot and comparing image size with body size
performing appropriate crop.

This commit has 2 tests failing. Not sure how to rewrite them, needs
refactoring.
Refactor browser and runner classes

Introduces CaptureSession class which now has all image manipulation
logic of Browser. Additionally, it unifies state callback and before
hook running logic. This changes allows us to simplify tests for the
capture procedure.