IndexingMemoryController should only update buffer settings of fully recovered shards

At the moment the IndexingMemoryController can try to update the index buffer memory of shards at any give moment. This update involves a flush, which may cause a FlushNotAllowedEngineException to be thrown in a concurrently finalizing recovery.

Closes #6642
I'd really like us to start using `EnumSets` for this kind of stuff and then do 

```Java
private static final EnumSet<IndexShardState> CAN_UPDATE_INDEX_BUFFER_STATES = EnumSet.of(....);

if (CAN_UPDATE_INDEX_BUFFER_STATES.contains(state) == false) {
  continue;
} 
```