[MAJOR] replaced rbtree with ul2tree.

The rbtree-based wait queue consumes a lot of CPU. Use the ul2tree
instead. Lots of cleanups and code reorganizations made it possible
to reduce the task struct and simplify the code a bit.
diff --git a/src/backend.c b/src/backend.c
index 0eb97ed..f096874 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -572,7 +572,7 @@
 		 * we have to inform the server that it may be used by another session.
 		 */
 		if (may_dequeue_tasks(t->srv, t->be))
-			task_wakeup(&rq, t->srv->queue_mgt);
+			task_wakeup(t->srv->queue_mgt);
 		return 1;
 	}
 	return 0;
@@ -611,7 +611,7 @@
 			t->be->failed_conns++;
 			/* release other sessions waiting for this server */
 			if (may_dequeue_tasks(t->srv, t->be))
-				task_wakeup(&rq, t->srv->queue_mgt);
+				task_wakeup(t->srv->queue_mgt);
 			return 1;
 		}
 		/* ensure that we have enough retries left */
@@ -625,7 +625,7 @@
 	 */
 	/* let's try to offer this slot to anybody */
 	if (may_dequeue_tasks(t->srv, t->be))
-		task_wakeup(&rq, t->srv->queue_mgt);
+		task_wakeup(t->srv->queue_mgt);
 
 	if (t->srv)
 		t->srv->failed_conns++;
@@ -691,7 +691,7 @@
 
 		/* release other sessions waiting for this server */
 		if (may_dequeue_tasks(t->srv, t->be))
-			task_wakeup(&rq, t->srv->queue_mgt);
+			task_wakeup(t->srv->queue_mgt);
 		return 1;
 	}
 	/* if we get here, it's because we got SRV_STATUS_OK, which also