crimson/os/seastore: handle enoent in SeaStore::Shard::stat
stat() aborts via assert_all when get_onode() returns ENOENT for a
non-existent object. But get_onode() explicitly declares enoent as a
valid error (onode_manager.h:36-40), and replicated_recovery_backend
calls stat() during push-based recovery on objects that haven't been
pulled yet.
Handle enoent by returning an empty struct stat — same pattern as
exists() (line 1207) and the !store_active early return (line 1384).
The recovery code in replicated_recovery_backend.cc:831-840 already
handles st_size=0 correctly.
Add a unit test that stats a non-existent object to verify it returns
an empty struct instead of aborting.