cyclades: Add validate function for IP actions

Use this function to verify that an IP can be deleted. The rationale
behind getting the delete check out of the `delete_floating_ip` action
is to make it easy for other apps to import it.
cyclades: Add tests for IP actions

Add a test for creating a floating IP and a test to check if the
`validate_ip_action` works as intended.
astakos: Prevent suspending a suspended project

If a project is already suspended, then do not allow the "SUSPEND"
action on it. Also, return an appropriate message.
astakos: Update validate user/project actions

Instead of passing the exception as a string, pass the class and raise
it using the provided message.
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
common: force setting dependencies as str
common: better setting repr/str
common: better, earlier settings cycle detection
common: move settings mechanism to synnefo.lib

Since module synnefo.settings initializes settings on import,
one could not access the setting mechanism module (.setup),
and global defaults (.default) without triggering it,
which involves reading configuration files.

Conflicts:
	snf-common/synnefo/settings/__init__.py
	snf-cyclades-app/synnefo/app_settings/default/backend.py
	snf-cyclades-app/synnefo/app_settings/default/ui.py
	snf-cyclades-app/synnefo/app_settings/default/userdata.py
Annotate snf-cyclades-gtools settings

Also, create the 'default' directory and move settings there.
Update 'setup.py' accordingly.

Conflicts:
	snf-cyclades-gtools/setup.py
Annotate snf-cyclades-app settings

Make sure for every setting that gets annotated to change the
corresponding 'getattr' entry to a 'settings.SETTING' entry.

Conflicts:
	snf-cyclades-app/synnefo/app_settings/default/api.py
	snf-cyclades-app/synnefo/app_settings/default/backend.py
	snf-cyclades-app/synnefo/app_settings/default/plankton.py
	snf-cyclades-app/synnefo/app_settings/default/ui.py
	snf-cyclades-app/synnefo/app_settings/default/userdata.py
	snf-cyclades-app/synnefo/ui/views.py
Annotate snf-pithos-app settings

Create the 'settings/default/' directory and move all settings there.
Update 'setup.py' accordingly.

Conflicts:
	snf-pithos-app/pithos/api/settings.py
Annotate snf-astakos-app settings

Create the 'settings/default/settings.py file and move all settings there.
Also import this file from 'settings/default/__init__.py, so that the
structure is uniform across all Synnefo components.

Conflicts:
	snf-astakos-app/astakos/im/settings.py
Annotate snf-branding settings

Create the 'settings/default/settings.py file and move all settings there.
Import this file from 'settings/default/__init__.py, so that the structure
is uniform across all Synnefo components. Finally, add the corresponding
entry point in 'setup.py'.

Conflicts:
	snf-branding/synnefo_branding/settings.py
Annotate snf-stats-app settings

Create the 'settings/default/settings.py file and move all settings there.
Import this file from 'settings/default/__init__.py, so that the structure
is uniform across all Synnefo components. Update the corresponding
entry point in 'setup.py'. Finally, prepend all default settings with
'STATS_'.

Conflicts:
	snf-stats-app/synnefo_stats/settings.py
Annotate snf-common settings

Just annotate the settings in 'synnefo/settings/default/admins.py'

Conflicts:
	snf-common/synnefo/settings/default/admins.py
settings: de-automate base url settings

Conflicts:
	snf-cyclades-app/synnefo/app_settings/default/api.py
common: add DEBUG and TEST global settings
astakos: fix MEDIA_URL dependency
common: setting cycle detection tests