Always update IPs when Node.update() is called.
Assign public IPs in `is_instance_running()` instead of `get_ips()`.
Also change the way we allocate IP addresses, as the old way is not
compatible with OpenStack Havana.
Fix allocation of public IPs:
* first, check if there is any free allocated floating IP to use
* then, try to allocate an IP and use it
This test seems broken to me. It only check that `node.update_ips()`
is _not_ calling `provider.get_ips()`, which is *wrong*, as we need to
call it each time.

        # check with already present ips
        ip_unused = "127.0.0.3"
        provider.get_ips.return_value = (ip_unused, ip_unused)

        node.update_ips()

        self.assertEqual(node.ip_private, ip_private)
        self.assertEqual(node.ip_public, ip_public)
AnsibleSetupProvider: use private IP address if node does not have a public IP address when building ansible inventory file.
refactored cluster: nodes are now added by the client through the method `add_node` or `add_nodes`. The cluster doesn't add nodes anymore. Also the cycle dependency between cluster and configuration is solved.
refactoring min_nodes: the min_nodes property is now a parameter to the cluster.start method.
Add documentation for abstract constructor of `AbstractCloudProvider`
class.
Call `SetupProvider` constructor with keyword arguments only.
refactoring cluster repository: to make elasticluster better extensible the `ClusterStorage` is moved to the repository module and implements the `AbstractClusterRepository` contract. The old json implementation is replaced with pickle to store all relevant information of a cluster into the storage file.
Merge branch 'refactoring' of https://github.com/gc3-uzh-ch/elasticluster into refactoring

Conflicts:
	elasticluster/cluster.py
	elasticluster/providers/ansible_provider.py

merge d8739ec from master with refactoring branch
refactoring ansible provider: remove configuration file relevant parsing from the ansible provider to the conf module. Refactoring of constructor parameters to make it clear what is needed and what not.