refactored VideoWriter class (convert it to abstract interface)
refactored VideoReader (convert it to abstract interface)

also refactored VideoSource interface (made it simplier, now it has only 2 abstract methods)