I want to add a `predefined_query_handler` to serve a single JSON from my query.
For example

```xml
<rule>
      <url>/my/url</url>
      <methods>GET</methods>
      <handler>
        <type>predefined_query_handler</type>
        <query>select '{"my": "json"}' format JSONAsString</query>
      </handler>
    </rule>
```

I can use `RawBLOB` but it sets up Content-Type 'text/plain' instead of 'application/json'.
I think JSONAsString should also work with output.

using CompiledRegexPtr = std::shared_ptr<const re2::RE2>;
class HTTPHandler : public HTTPRequestHandler
{
public:
    HTTPHandler(IServer & server_, const std::string & name);
    virtual ~HTTPHandler() override;
    void handleRequest(HTTPServerRequest & request, HTTPServerResponse & response) override;
    
    virtual void customizeContext(HTTPServerRequest & , ContextMutablePtr ) {}
    virtual bool customizeQueryParam(ContextMutablePtr context, const std::string & key, const std::string & value) = 0;
    virtual std::string getQuery(HTTPServerRequest & request, HTMLForm & params, ContextMutablePtr context) = 0;
private:
    struct Output
    {
        /* Raw data
         * ↓
         * CascadeWriteBuffer out_maybe_delayed_and_compressed (optional)
         * ↓ (forwards data if an overflow is occur or explicitly via pushDelayedResults)
         * CompressedWriteBuffer out_maybe_compressed (optional)
         * ↓
         * WriteBufferFromHTTPServerResponse out
         */
        std::shared_ptr<WriteBufferFromHTTPServerResponse> out;
        /// Po
        std::shared_ptr<WriteBuffer> out_maybe_compressed;
        /// Po
        std::shared_ptr<WriteBuffer> out_maybe_delayed_and_compressed;
        bool finalized = false;
        inline bool hasDelayed() const