'+' = done, '-' = todo, '*' = done except doc

1.2.12 :
 + weighted RR/SH

1.2.13 :
 + maxconn
 + queueing

1.2.14 :
 * HTML status page

        stats enable
        stats uri /?stats  
        stats realm w.ods.org\ statistics
        stats auth user1:pass1
        stats auth user2:pass2
        stats auth user3:pass3
        stats scope <px_id> | '.'

 + allow server-less proxies (for stats)

 - separate timeout controls

 + option 'abortonclose' : if the session is queued or being connecting
   to the server, and the client sends a shutdown(), then decide to abort
   the session early because in most situations, this will be caused by
   a client hitting the 'Stop' button, so there's no reason to overload
   the servers with unservable requests. However, this is not HTTP compliant
   and might cause little trouble to some very specific clients used to
   close immediately after sending the request (no support for KA, which ones?)

 - minconn : makes the server's maxconn dynamic, which will be computed as a
   ratio of the proxy's sessions :
     srv->effective_maxconn =
          max(srv->maxconn * px->nbsess / px->maxconn, srv->minconn)

1.3 :
 - handle half-closed connections better (cli/srv would not distinguish
   DATA/SHUTR/SHUTW, it would be a session flag which would tell shutr/shutw).
   Check how it got changed in httpterm.

 - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
   demand)

 - wait queues replaced for priority-based trees

 - ability to assign a prio based on L7 matching

 - prio-based O(1) scheduler

 - maxconn reserve for VIP/admins

 - verify if it would be worth implementing an epoll_ctl_batch() for Linux

