MAJOR: connection: replace struct target with a pointer to an enum

Instead of storing a couple of (int, ptr) in the struct connection
and the struct session, we use a different method : we only store a
pointer to an integer which is stored inside the target object and
which contains a unique type identifier. That way, the pointer allows
us to retrieve the object type (by dereferencing it) and the object's
address (by computing the displacement in the target structure). The
NULL pointer always corresponds to OBJ_TYPE_NONE.

This reduces the size of the connection and session structs. It also
simplifies target assignment and compare.

In order to improve the generated code, we try to put the obj_type
element at the beginning of all the structs (listener, server, proxy,
si_applet), so that the original and target pointers are always equal.

A lot of code was touched by massive replaces, but the changes are not
that important.
diff --git a/src/queue.c b/src/queue.c
index dd6e962..abc0f8c 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -122,7 +122,7 @@
 
 	/* we want to note that the session has now been assigned a server */
 	sess->flags |= SN_ASSIGNED;
-	set_target_server(&sess->target, srv);
+	sess->target = &srv->obj_type;
 	session_add_srv_conn(sess, srv);
 	srv->served++;
 	if (px->lbprm.server_take_conn)
@@ -148,7 +148,7 @@
 
 	sess->pend_pos = p;
 	p->sess = sess;
-	p->srv = srv = target_srv(&sess->target);
+	p->srv = srv = objt_server(sess->target);
 
 	if (sess->flags & SN_ASSIGNED && srv) {
 		LIST_ADDQ(&srv->pendconns, &p->list);