Initial abstraction for VCS

The code is not yet used yet, it's just a draft of how the class might
look like.

See issue #511 and #126

Signed-off-by: Michal Čihař <michal@cihar.com>