Support of groups of services in locator.

Services could be combined into a group with some weights. When a client resolves service with name of the group, locator will return random service from the group accordingly to the weights.
Locator groups work with gateway.

Groups work with services anounced through multicast.
Locator reads groups from storage.

Locator reads groups from storage at initialization, from namespace 'groups'.
Replace tuple with just class members.

Before i made class group_index_t, it was just tuple. And for some strange reason i made group_index_t a wrapper on top of this tuple.
Using of <random> instead of boost random and thread safety fix.

Groups index is used under lock.
Locator maintains index of services and remote nodes.

Now locator maintains information about which services it provides (through gateway or local) and just tells to gateway which services to add or remove.
Before gateway has been collecting this information itself. Locator needs this information to handle groups, gateway needs one to balance requests.
So i moved this functionality from gateway into locator.
Fix bug with removing services from groups.

'update_remote' method of services_t returns services added and removed from particular remote node and locator applied these changes to groups.
But from groups service must be removed only when it's removed from all nodes.
Replace set/remove_group methods of locator with update_group.

Old methods provided opportunity to quiet change groups. It's security hole. New method reloads group from storage.
Merge branch 'master' of https://github.com/andrusha97/cocaine-core into andrusha97-master

Conflicts:
	include/cocaine/api/gateway.hpp
	include/cocaine/detail/gateways/adhoc.hpp
	include/cocaine/detail/locator.hpp
	include/cocaine/messages.hpp
	src/gateways/adhoc.cpp
	src/locator.cpp
Additional stuff for the Routing Groups patch.
Fixed building on GCC 4.4.
Minor improvements.

* 'services_t' has been renamed to 'router_t', because difference between 'services_t' and 'services_list_t' was not clear.
* Some logging messages have been added.
* Router and services list are used under different mutexes, so some operations no longer block each other.
One more logging message.

Locator writes to log if there is no groups in storage.
Routing groups cleanup.
Changelog update.
Only load those routing groups marked with 'active' tag so that there
could be inactive but still available groups in the storage.
Damn you, GCC 4.4.
Merge remote-tracking branch 'upstream/master' into ExceptionalStuff

Conflicts:
	CMakeLists.txt