Use aggregation classloader

This fixes a ClassNotFound error when compiling aggregations from a plugin
Fix StateCompiler to use classloader of interface

Fixes an issue loading the ML plugin
Load balance splits across nodes

The maximum number of splits running on a node are bounded.
In order to avoid starvation of queries with fewer splits, beyond the
maxSplitsPerNode, every node allows a certain number of splits to be
queued per query. The drawback of this approach is that when the system
is heavily loaded (wrt number of queries), then the number of tasks on
each node will increase linearly with the number of queries and each
node will have at least some splits queued for each query. The drawback
is limited only when the system is heavily loaded and is not
any worse off than the current approach.
fix typo