health: Adding first draft to get distributed

Turning health into a distributed mode will help controlling what node
is running what. In a perfect idea, that would mean having ahc inside
VMs controller by a centralized server.

This commit is provided the first code for it by providing a protocol,
some messages, client & server code.
health: Adding classes to manage action on modules

The main idea is to trigger some actions when a module have a particular
action.

As all modules shall have the same actions (stop/start/..) let's make a
generic class and override the needed actions in specific classes like
cpu,storage,...

This commit introduce a first set of classes and a sample case
health: Logging message,module,action

That's much more easy to read log when all those information are
reported :

2014-04-16 11:06:45,458 DEBUG Sent ACK/NONE/NONE to ('127.0.0.1', 40470) (need_ack=False)
2014-04-16 11:06:48,058 DEBUG Sent MODULE/CPU/START to ('127.0.0.1', 40470) (need_ack=False)
2014-04-16 11:06:50,102 DEBUG Received MODULE/CPU/COMPLETED from ('127.0.0.1', 40470) (need_ack=False)
health: Adding health_libs

Moving some code out of health-check to get in common with
health-client.py
health: Support client disconnect

If the client exists, it shall sent a disconnect message to the server
that handle this task properly.

In fact, the socket reference on the server side was deleted before
closing the socket.
health: Adding cpu support

This patch is using the hw.py as input, run the cpubenchmark and return
the hw.py structure in the completed message to the server.
health: Using decode() on read line

This is mandatory on python3 unless we do have exceptions.
health: Handling cpu decrease if test completed

Once the CPU test is completed, let's decrease the cpu count
health: Fixing connected node count

It's sufficient to check if a node exists to report it connect.
Checking the last message is wrong as it always change.
health: Keeping complete message

It could be useful to keep the last message of a host instead of a part
of it.
health: Switching to python2

In fact, python3 isn't required at all to get it work.
health-client: Server name as argument

The name of the server to be connected with shall be a parameter.
health: Adding non-interactive mode support

This patch is adding a yaml description for a job that runs when the
conditions are met.
health-server: Adding get_default_value()

The yaml format allow people from defining global variables in the main
section or override them in each benchmark section.

The get_default_value() try to get the value of a parameter in a section
or use a default value.

This patch does implement this function and use it to get the default
runtime or required-hosts values.
health-server: Fixing host printing
health-server: Hosts status in a single structure

Hosts status is now kept in a single structure (hosts_state) with a
bitfield computation.

This patch does also remove the interactive mode which isn't supported
for now. It will be added again once the non-interactive will be
    completed.
health-server: Don't use job['name'] everywhere

It's better checking values in a single part of the code instead of
using it everywhere.
health-client: Handling broken socket case

If the socket is broken, we shall handle it properly unless the client
is complaining in loop that it cannot send messages.

This patch add a state where the client got disconnected and doesn't try
to inform the server it got disconnected ;o)
health-server: Server wait client to disconnect

When the server want to shutdown, it shall wait that all clients it ask
to disconnect are really disconnected unless it breaks the socket.
health-server: Adding core definition in yaml file

Let's decide how much cores we want to test while running a cpu
benchmark