KeyValueStore: Fix EC+ KV OSDs crashing

Note: It's a incompatible change!

KeyValueStore: Add KEY_ENDING sign to the end of key
    
    Keys stored in alphabetical order and need to follow ghobject_t comparison
    rule. "generation" and "shard_id" are optional fields for object key, but
    a default ghobject with UINT64_MAX generation(by default) will larger than
    the same ghobject with other generation. GenericObjectMap rejects to store
    generation if generation is UINT64_MAX in order to reduce too much words
    in key. So we need to add a MAX sign to the end of key to make ordering
    is same with ghobject's comparison rule.
    
    For example:
    
    _GHOBJTOSEQ_:1%e1ds0_head!D168A7E8!!1!!benchmark_last_metadata!head
    _GHOBJTOSEQ_:1%e1ds0_head!D168A7E8!!1!!benchmark_last_metadata!head!78!0
    
    The first key should larger than the second in ghobject_t ordering because
    of generation. But the first key less than the second in GenericObjectMap.
    
    _GHOBJTOSEQ_:1%e1ds0_head!D168A7E8!!1!!benchmark_last_metadata!head
    _GHOBJTOSEQ_:1%e1ds0_head!D168A7E8!!1!!benchmark_last_metadata!head!78!0
    
    After we add KEY_ENDING, '!' is (21) in hexadecimal:
    
    _GHOBJTOSEQ_:1%e1ds0_head!D168A7E8!!1!!benchmark_last_metadata!head(21)78!0(FF)
    _GHOBJTOSEQ_:1%e1ds0_head!D168A7E8!!1!!benchmark_last_metadata!head(FF)

Fix #10119