Client library: fix recursion handling with QFS protocol state machine's EnsureConnected() method. Fix space reservation with write appender when using server (connection) pool, by detecting disconnects, and setting reserved space to 0 in such case, as the chunk server automatically releases all client allocated space in the event of disconnect (the write id remains valid though). Implement lease acquire variant for append recovery to allow the client to specify the chunk server list that it needs to talk to in order to recover append status. This is required in order to deal with append status recovery after chunk deletion, where the meta server has no knowledge of the servers participated in the append synchronous replication, and to handle the cases where the hosting servers have changed due to chunk re-replication. The chunk servers keep the append state around after chunk deletion to allow the client to recover the status.
Kfsio library: define "append recovery" chunk access flag with chunk access token.
Chunk server: handle append recovery access with only append recovery flag set, by allowing by allowing append recovery RPC to proceed (with no write access flag set).
Meta server: implement append recovery access special handling with the lease acquire. Grant chunk server and chunk access in the case when chunk does not exist, but chunk id is not greater than the last allocated chunk id, and no chunk allocation with the requested chunk id are in flight, to prevent the client from acquiring append recovery access to chunks that are about to be created or might be created in the future. Grant special "append status recovery" access, even if according to the meta server state the chunk isn't hosted on a requested chunk server in order to allow the append client to perform recovery by accessing the append status information that the chunk servers participated in the synchronous append replication, keep for the pre-defined period of time past chunk deletion.