HPCC-12250 Allow pluggable interface to workunit creation

Initial work on splitting the workunit implementation so that Dali-specific code is isolated
The reason there is a secure factory per call  is that the secure factory is holding the username info (and therefore we need a different one for different requests). It's basically just a wrapper of the user info plus the unsecure factory, to avoid having to pass the user info to every member of the WorkUnitFactory interface every time.