Low level accessor/muttator to exhibit configuration
====================================================
Adaptors to access / modify exhibit configuration from annotation.
Daviz configuration is keept in annotations like:

    anno['eea.daviz.config.views']
    <persistent.list.PersistentList object at ...>

    anno['eea.daviz.config.views']
    [
        {'name': 'map', ...},
        {'name': 'timeline', ...}
    ]

    anno['eea.daviz.config.facets']
    <persistent.list.PersistentList object at ...>

    anno['eea.daviz.config.facets'] = [
        {'name': 'First Name', 'type': 'list'},
        {'name': 'Job title', 'type': 'cloud'}
    ]

Let's test it in real world

    >>> self.loginAsPortalOwner()
    >>> _ = portal.invokeFactory('Folder', 'sandbox')
    >>> sandbox = portal._getOb('sandbox')
    >>> _ = sandbox.invokeFactory('File', 'daviz-file')
    >>> daviz_file = sandbox._getOb('daviz-file')

    >>> from eea.app.visualization.interfaces import IVisualizationEnabled
    >>> from zope.interface import implements, alsoProvides
    >>> if not IVisualizationEnabled.providedBy(daviz_file):
    ...     alsoProvides(daviz_file, IVisualizationEnabled)

    >>> from zope.component import getAdapter
    >>> from eea.app.visualization.interfaces import IVisualizationConfig

    >>> handler = getAdapter(daviz_file, IVisualizationConfig)
    >>> handler.views
    []

    >>> handler.facets
    []

Add view

    >>> name = handler.add_view('table')
    >>> handler.views[0].__class__
    <class 'persistent.mapping.PersistentMapping'>

Get view

    >>> view = handler.view(name)
    >>> view.get('name')
    'table'

Delete view

    >>> handler.delete_view(name)
    >>> handler.views
    []

Add facet

    >>> name = handler.add_facet('First Name')
    >>> handler.facets[0].__class__
    <class 'persistent.mapping.PersistentMapping'>

Get facet

    >>> facet = handler.facet(name)
    >>> facet.get('name')
    'First Name'

Delete facet

    >>> handler.delete_facet(name)
    >>> handler.facets
    []
