snf_django: Remove Help column from filter listing

Rely on a better Description rather than the extra Help column.
astakos: Improve description of AstakosUser fields

These end up as filter descriptions in `user-list --list-filters'.
cyclades: Validate VM metadata on create/update

* Check for VM max metadata items when updating/creating a single item.
* Check the length of metadata items when updating metadata items.
astakos: Fix a unicode bug in user-add

Fix a unicode bug in snf-manage user-add when the username contained
non-ascii characters.
astakos: Add checks for quota limits

Check that total (project) quota limit is no less than member limit;
and that both limits are not negative.
pithos: Recover from DB integrity errors

In Pithos+ atomicity is forced on the container level.
Hence, write operations in the account level can produce
integrity errors.

This commit handles these cases.

In PostgreSQL, a transaction is aborted
(and all the subsequent commands are ignored)
if an integrity error occurs.

Therefore, before performing an command
that can produce an integrity error,
a new savepoint is defined inside the transaction,
and after the command execution is rollbacked or committed
according to execution status.
common: reconfigure the synnefo settings framework

- add 'services' endpoint in 'synnefo' namespace,
  where all components register their services.

- add three stages of setting initialization:
  1. preprocessing, after default settings are read from components,
     and before any user configuration files are read.
  2. postprocessing, after all user configuration files have been read.
  3. setup, which runs a (configurable) list of setup modules on the
     settings.

- add special default settings value classes:
  - setting_name = Example("example value")
    which makes 'setting_name' mandatory to be set by the user,
    providing an example value for the error message if they don't.

  - setting_name = Default("default value")
    which makes the setting optional for the user settings,
    but also makes synnefo settings "know" whether the user did
    configure it themselves or just let it default.

  - setting_name = Deprecated()
    which makes the setting mandatory to NOT be set by the user,
    to force them to remove it or replace it appropriately

- preprocessing scans settings for the special-value classes
  and compiles the following dicts:

  settings._DEPRECATED -> a dict with all Deprecated() settings
  settings._MANDATORY -> a dict with all Example() settings
  settings._DEFAULTS -> a dict with all Defaults() settings
  settings._OTHER -> a dict with the rest of the settings

- postprocessing scans the settings after reading the user configuration
  files, raises errors on mandatory and deprecated settings, and
  compiles a settings._CONFIGURED dict with all default settings that
  have been actually configured by the user.

- settings.SYNNEFO_SETTINGS_SETUP_MODULES is initialized as
  ['synnefo.settings.setup.services'].
  At the setup stage, all modules within that list are imported
  and their module.setup_settings(settings) function is run.

- services.setup_settings() configures:

  - settings.SYNNEFO_SERVICES, a JSON-exportable document from all
    documents contributed by installed synnefo components via the
    'services' entry point.

  - settings.SYNNEFO_COMPONENTS, a dict of component names to
    their services catalog (dict), extracted from SYNNEFO_SERVICES.

  - for each component name, it demands a settings.<COMPONENT>_BASE_URL
    setting, making it a fatal error not to provide one.
    After retrieving COMPONENT_BASE_URL, it also generates
    settings.<COMPONENT>_BASE_HOST and settings.<COMPONENT>_BASE_PATH

  - Using the base path settings, fills in the PublicURL entrypoints
    for all services in SYNNEFO_SERVICES.

- add snf-manage settings command, to display various aspects of
  settings, such as complete listing, defaults-only, configured-only,
  etc.

Conflicts:
	astakosclient/astakosclient/__init__.py
	snf-astakos-app/astakos/im/astakos_resources.py
	snf-astakos-app/astakos/im/management/commands/service-export-astakos.py
	snf-astakos-app/astakos/im/settings.py
	snf-astakos-app/astakos/im/tests/api.py
	snf-astakos-app/astakos/urls.py
	snf-common/synnefo/lib/services.py
	snf-common/synnefo/settings/__init__.py
	snf-common/synnefo/util/keypath.py
	snf-cyclades-app/synnefo/api/tests/images.py
	snf-cyclades-app/synnefo/api/tests/networks.py
	snf-cyclades-app/synnefo/api/tests/servers.py
	snf-cyclades-app/synnefo/app_settings/urls.py
	snf-cyclades-app/synnefo/cyclades_settings.py
	snf-cyclades-app/synnefo/plankton/tests.py
	snf-cyclades-app/synnefo/quotas/resources.py
	snf-cyclades-app/synnefo/ui/settings.py
	snf-pithos-app/pithos/api/management/commands/service-export-pithos.py
	snf-pithos-app/pithos/api/resources.py
	snf-pithos-app/pithos/api/settings.py
elements from Remove 'v' from service version IDs, keep it in URLs
support setting SERVICE_BASE_URL from environment

Also, add environment variable SYNNEFO_RELAX_MANDATORY_SETTINGS.

Conflicts:
	ci/tests.sh
	snf-cyclades-app/synnefo/app_settings/default/api.py
Enhance the new settings framework.

- Add an annotation superclass Setting
  See synnefo.settings.setup:Setting for documentation.

- Add Mandatory, Default, Auto, Constant, Deprecated, setting subclasses.

- Add management command 'settings' with setting filtering and
  various options for displaying settings.

- Add fundamental dynamic settings such as SERVICE_BASE_URL, etc.

- Write some example annotations for settings.

- Transition and other concerns:
  * Eventually all settings must be annotated and conformant.
    Currently this has been relaxed with a FIXME.
    Duplicate annotation errors and setting override errors
    are disabled with a FIXME.

  * Django settings that are critical for synnefo must be annotated?

  * Django settings that are not critical must be set in specific
    files 'NN-system.conf' in order to be accepted without annotation.

  * Cleanup test settings so they don't need many exceptions
    (e.g. relaxing mandatory settings)

  * The following are demos, and probably will need to be tuned
    to specific requirements:

    - The Deprecated and Constant classes
    - Setting validation.
      Right now it must be incorporated within the configure callback.
    - The snf-manage settings --printout-files option,
    - The snf-manage settings --select list of filters.
    - There is a commented-out synnefo.setting namespace cleanup block.
      Django only considers all-caps names for settings and
      this notion has been inherited for this setting framework.
      However, cleaning up synnefo.settings breaks it.

Conflicts:
	Changelog
	snf-astakos-app/astakos/settings/__init__.py
	snf-astakos-app/setup.py
	snf-common/synnefo/settings/__init__.py
	snf-cyclades-app/synnefo/app_settings/default/api.py
settings: remove debug print statement
settings: add description in --detail
settings: support printout of runtime setting values
settings: safer --printout-files

- split category files according to depth
  (before, maximum depth per category was used)
- abort if file already exists
settings: deferred init, SubMandatory type, fixes

Also, required/disallowed args class attributes
settings: fix if/elif logical error
settings: SubMandatory: require dependencies by default
settings: better setting init failure reporting
settings: some command-line help fixes
settings: require category for Mandatory