Added BalancedShardsAllocator that balances shards based on a weight function.

 * Weights are calculated per index and incorporate index level, global and primary related parameters
 * Balance operations are executed based on a win maximation strategy that tries to relocate shards
   first that offer the biggest gain towards the weight functions optimum
 * The WeightFunction allows settings to prefer index based balance over global balance and vice versa
 * Balance operations can be throttled by raising a threshold resulting in less agressive balance operations
 * WeightFunction shipps with defaults to achive evenly distributed indexes while maintaining a global balance

Closes #2555
Allow ShardsAllocator to be configured via node level settings.

* Default ShardsAllocator is set to BalancedShardsAllocator
* Core ShardsAllocator implementations can be defined via 'cluster.routing.allocation.type'
* Core ShardsAllocator implementations are exposed via short keys 'balanced' (BalancedShardsAllocator) and 'even_shards' (EvenShardsCountAllocator)
* Third party allocators can be loaded via fully-qualified class names.

Closes #2557
use camelcase for getters
Remove deprecated StreamInput/Output#read/writeUTF
upgrade to netty 3.6.2
create index and mapping first to ensure all relevant nodes see the mapping
testMoreLikeThisIssue2197 should create index mapping first to prevent races
provide more information if a null DocumentMapper is returned
Respect lowercase_expanded_terms in MappingQueryParser

Fixes #2566
wait for cluster to be formed in SimpleNodesInfoTests
Added trace log statement, to catch stacktraces