HPCC-12311 Remove extra calls to Dali for JobQueues

The existing WsSMC.Activity code retrieves JobQueue info
using the functions inside wujobq and dfuwu. The
createJobQueue() and copyItemsAndState() are used for an
ECL job queue. The queuedJobs() is used for a DFL job queue.
Each of those functions creates at least one connection to
Dali. Since an HPCC systrem contains multiple job queues, a
lot of the connections are created for one onActivity call.
In this fix, only one connection is used to Dali which gets
the /JobQueues tree and the tree has the JobQueue info for
all of the job queues.

Signed-off-by: wangkx <kevin.wang@lexisnexis.com>
Do we need the first queryClientRoot() which is just one line: 'return qd.root->queryPropTree(xpath);'?
Where should the second/third queryClientRoot()? If in the const, how to move the sessionid out of the const? If in the non-const, how to call them from the const? Here is my code for now:
IPropertyTree *queryClientRoot(sQueueData &qd, SessionId id)
    {
        VStringBuffer path("Client[@session=\"%"I64F"d\"]",id);
        IPropertyTree *ret = qd.root->queryPropTree(path);
        if (!ret)
        {
            ret = createPTree("Client");
            ret = qd.root->addPropTree("Client",ret);
            ret->setPropInt64("@session",sessionid);
            StringBuffer eps;
            ret->setProp("@node",queryMyNode()->endpoint().getUrlStr(eps).str());
        }
        return ret;
    }

    IPropertyTree *queryClientRoot(sQueueData &qd,unsigned idx=(unsigned)-1)
    {
        if (idx==(unsigned)-1)
            return queryClientRoot(qd, sessionid);
        else
        {
            VStringBuffer path("Client[%d]",idx+1);
            return qd.root->queryPropTree(path);
        }
    }