cluster responsible for storing nodes and simplified scheduler interface

From now on, having a storage is mandatory when creating a new Cluster
intance.

The idea is having only one place responsible for storing nodes and any
associated metadata. Having the scheduler responsible for the storage
caused some code duplication. Also the ownership of the nodes wasn't
clear, some information being stored by the cluster and some by the
scheduler.

Schedulers can now query the cluster for a list of nodes or only nodes
matching certain metadata information. With this list in hand the
scheduler is only responsible for choosing which is the chosen one.

This serves as a groundwork to issue #25. Now we'll have all information
about the nodes in one place, and it'll be easier to mark some nodes
as quarantined or disabled, and rescheduling in case of errors.
saving and retrieving nodes metadata in storages