Generate unique index from metadata and version

- The unique index ensures that a given version can not exist
  twice for a unique owner of the events. The unique owner
  is identified by stream name + optional metadata
- Improve migrations support by allow public access to schema
  manipulation and ease usage of it