Done
=====

* simplify storage of versionId attribute
* all IVersionEnhanced objects have a versionId, by default
* versioned objects implement IVersionEnhanced by default
* no longer assign a versionId on IVersionControl instantiation; this is not
  needed anymore
* rename GetVersions.versions to GetVersions.enumerate_versions
* removed not implemented getVersionNumber from IVersionControl
* renamed extract to _get_info
* optimize getting information in GetVersions
* refactored version_number
* renamed 'newest' to later_versions
* simplified latest_version
* renamed oldest to earlier_versions
* get rid of get_versions_api, should use IGetVersions(context) and
  context/@@getVersions
* added a GetVersionsView
* renamed get_latest_version_link to get_latest_versionId
* no longer call IVersionControl in get_latest_version_link, as versionIds are
  always guaranteed
* GetLatestVersionLink and GetVersionId do the same thing; removed
  GetLatestVersionLink
* got rid of @@getVersionId, get_version_id_api and get_version_id(); use
  context/@@getVersions/versionId
* refactored versions_macros; it used getLatestVersionLink like it was
  special; it's not, it just returns the current versionId, as ds_resolveuid
  always returns the real latest version 
* simplified code in generateNewid and _random_id; no longer use UID() to test
  for object identity, as it's not really necessary
* removed pages getVersionId, getLatestVersionLink
* added GetVersions.versions(), which returns just a list of version objects
* refactor eea.indicator's IndicatorMixin to use uids, it's more natural
* redone the interfaces according to classes
* see if versions_macro is displayed for objects which are not IVersionEnhanced
* renamed versionIdHandler to assign_new_version_id
* fixed and extended tests
* refactored portlet_versions to use isVersionEnhanced checks to skip
  rendering if not needed
* wrote test for generateNewId


TODO
====
* refactor portlet_versions, it's redoing extract()
  The portlet doesn't show anything if not isVersionEnhanced, so it should be
  easy to refactor with an on-error or something
* revokeVersion should reassign a new random versionId
* get rid of GetContextInterfaces, plone has a builtin utility view for that
    * item_interfaces context/@@plone_interface_info; is_video python:item_interfaces.provides('eea.mediacentre.interfaces.IVideo');
* rename isLatest to is_latest

Discussable
------------
* add getVersionId to IGetVersions -not needed, available as versionId
* add security assertions based on interfaces
* move ds_resolveuid in this package, from eea.dataservice

old storage of versionId:
=========================

#Version ID
ver = annotations.get(VERSION_ID)
if ver is None:
   verData = {VERSION_ID: ''}
   annotations[VERSION_ID] = PersistentDict(verData)
   #_reindex(context)

