pithos: Restore XML input in uploads using hashmaps

In version 0.15 the option to create an object by providing the object's
hashmap in XML format, instead of the actual data, was disabled. Restore
this operation by substituting the 'minidom' module (vulnerable to some
security implications) with the 'lxml' module for performing the XML
parsing. Also fix the respective test case.

Close grnet/synnefo#155
Revert "pithos: Restore XML input in uploads using hashmaps"

This reverts commit 11b5b8503f7d85d6abffdfbb5111e21142b45ccb.
ci: Name directory when git-cloning

Explicitly name the directory where we clone a repo; don't rely on the
repo's name.
astakos: Add option to customize sender of emails

Allow changing the sender of an email in the `send_plain` function of
astakos.
astakos: Add test suite for user utilities

Use this test suite to check if `send_plain` function works as intended.
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
settings: set category for existing Mandatory

Set category to 'misc' for existing base url and astakos Mandatory
settings. Also fix typo in SubMandatory.