Introducing ability to filter versioned vertices's edges

This is a major feature and contains:

- Models created to support filtering and versioning context.
- Filtering edges is done by applying perdicate on the edges
- Tests for edges versions.
- Several general cleanups and docs.