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
Making it package private is tricky because the test that needs it lives in another package indeed, and I think it is in the right place. On the other hand this feels like an internal/implementation detail method and I don't think it should go on the interface. We call the class an InternalEngine so I think it's OK to have public methods which are not part of the official interface of it.