(#22375) Prefer raw-like serialization format

Previously, agents would backup files using PSON serialization, which is
not reliable for binary content, and incredibly inefficient due to the
applying a regexp to the entire in-memory file content.

Ideally, I would like to switch the Puppet::FileBucket::File class to
just use the `:raw` serialization format as is done for
Puppet::FileServing::Content. But this cannot be done in a minor series
without breaking compatibility between newer 3.x agents talking to older
3.x masters.

However, we can achieve the same effect by using the `:s` serialization
format, and we don't have the same compatibility problem because
the `from_s` method has been defined since 2.6.0 in commit e5a78009f.

If a newer master receives a file bucket request from an older agent
that sends a PSON encoded file, then the master will generate a
deprecation warning to update the agent.

Originally filed as #8229.
(#22375) Don't echo the backed up file to the caller

Previously, when the agent backed up a file to the master, the master
would inadvertently echo the file back to the agent in the body of the
HTTP response.

This is because the terminus' save method returned the file contents
as the 'result', and when invoked via REST, the {webrick,rack} REST
handlers automatically write the result into the response body.

Also puppet masters prior to 3.3 did not respect the Accept HTTP
header (#21427), so the master would always YAML encode the response,
which for binary content, large files, etc could result errors like
the following on the master:

    Error: Stack overflow in regexp matcher: /\A(?: # ?: non-capturing group (grouping with no back references)
                 [\x09\x0A\x0D\x20-\x7E]            # ASCII
               | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
               |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
               | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
               |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
               |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
               | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
               |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
               )*\z/mxn

This commit changes the Puppet::FileBucketFile::File terminus to
return a new model instance whose content is empty. This is a change
from previously when we were returning a string, but I think it's
clearer that the result needs to be serializable using one of the
Accept content-types that the client specified, e.g. `:s`.

Originally filed as #8229
Merge pull request #1870 from joshcooper/ticket/stable/22375-filebucket-serialization

(#22375) File bucket serialization