Don't load CompetionTerms if lookupFactory is null

Closes #4970
Closes #4788
Prevent usage of object based RamUsageEstimator in Completion090PostingsFormat
Add RamUsageEstimator#sizeOf(Object) to forbidden APIs

This method can be a performance trap since it traverse the
entire object tree that is referenced by the provided object.
See LUCENE-5373
Add explanations for all AllocationDeciders

Relates to #4380
Relates to #2483

Conflicts:
	src/main/java/org/elasticsearch/cluster/routing/allocation/AllocationService.java
	src/main/java/org/elasticsearch/cluster/routing/allocation/decider/EnableAllocationDecider.java
	src/main/java/org/elasticsearch/cluster/routing/allocation/decider/SameShardAllocationDecider.java
	src/main/java/org/elasticsearch/cluster/routing/allocation/decider/SnapshotInProgressAllocationDecider.java