tempfile: split pool into nocow and datacow variants
Replace the single Pool<BeesTempFile> m_tmpfile_pool with a
two-element array<Pool<BeesTempFile>, 2> m_tmpfile_pools keyed by
the datacow flag. Each pool pre-configures its generator with the
matching BeesTempFileConfig::m_datacow, so callers get temp files
of the right shape without the pool having to plumb the flag
through a factory lambda per borrow.
Add a new BeesContext::tmpfile(bool datacow) overload that returns
from the matching pool. The no-arg BeesContext::tmpfile() preserves
its legacy meaning by delegating to tmpfile(true); all existing
callers continue to get a datacow temp file.
BeesTempFile already honors config.m_datacow when it opens the
O_TMPFILE: if datacow=false the NOCOW inode flag is set, which is
required for extent rewriters to punch PREALLOC holes without btrfs
forcing a data copy. Prior to this commit the NOCOW path existed
in BeesTempFile but there was no pool that produced nocow temp
files; this commit wires the infrastructure together.
Standalone refactor in preparation for the extent planner, which
needs to borrow a temp file with the same datacow state as the
extent being rewritten.