There has been a lot of confusion during the development because of the
backends and frontends.

What we want :

- being able to still use a listener as it has always been working

- being able to write a rule stating that we will *change* the backend when we
  match some pattern. Only one jump is allowed.

- being able to write a "use_filters_from XXX" line stating that we will ignore
  any filter in the current listener, and that those from XXX will be borrowed
  instead. A warning would be welcome for options which will silently get
  masked. This is used to factor configuration.

- being able to write a "use_backend_from XXX" line stating that we will ignore
  any server and timeout config in the current listener, and that those from
  XXX will be borrowed instead. A warning would be welcome for options which
  will silently get masked. This is used to factor configuration.



Example :
---------

  | # frontend HTTP/80
  | listen fe_http 1.1.1.1:80
  |        use_filters_from default_http
  |        use_backend_from appli1
  | 
  | # frontend HTTPS/443
  | listen fe_https 1.1.1.1:443
  |        use_filters_from default_https
  |        use_backend_from appli1
  | 
  | # frontend HTTP/8080
  | listen fe_http-dev 1.1.1.1:8080
  |        reqadd "X-proto: http"
  |        reqisetbe "^Host: www1" appli1
  |        reqisetbe "^Host: www2" appli2
  |        reqisetbe "^Host: www3" appli-dev
  |        use_backend_from appli1
  | 
  | 
  | # filters default_http
  | listen default_http
  |        reqadd "X-proto: http"
  |        reqisetbe "^Host: www1" appli1
  |        reqisetbe "^Host: www2" appli2
  | 
  | # filters default_https
  | listen default_https
  |        reqadd "X-proto: https"
  |        reqisetbe "^Host: www1" appli1
  |        reqisetbe "^Host: www2" appli2
  | 
  | 
  | # backend appli1
  | listen appli1
  |        reqidel "^X-appli1:.*"
  |        reqadd "Via: appli1"
  |        balance roundrobin
  |        cookie app1
  |        server srv1
  |        server srv2
  | 
  | # backend appli2
  | listen appli2
  |        reqidel "^X-appli2:.*"
  |        reqadd "Via: appli2"
  |        balance roundrobin
  |        cookie app2
  |        server srv1
  |        server srv2
  | 
  | # backend appli-dev
  | listen appli-dev
  |        reqadd "Via: appli-dev"
  |        use_backend_from appli2
  | 
  | 


Now we clearly see multiple things :
------------------------------------

  - a frontend can EITHER have filters OR reference a use_filter

  - a backend can EITHER have servers OR reference a use_backend

  - we want the evaluation to cross TWO levels per request. When a request is
    being processed, it keeps track of its "frontend" side (where it came
    from), and of its "backend" side (where the server-side parameters have
    been found).

  - the use_{filters|backend} have nothing to do with how the request is
    decomposed.


Conclusion :
------------

  - a proxy is always its own frontend. It also has 2 parameters :
    - "fi_prm" : pointer to the proxy holding the filters (itself by default)
    - "be_prm" : pointer to the proxy holding the servers (itself by default)

  - a request has a frontend (fe) and a backend (be). By default, the backend
    is initialized to the frontend. Everything related to the client side is
    accessed through ->fe. Everything related to the server side is accessed
    through ->be.

  - request filters are first called from ->fe then ->be. Since only the
    filters can change ->be, it is possible to iterate the filters on ->be
    only and stop when ->be does not change anymore.

  - response filters are first called from ->be then ->fe IF (fe != be).


When we parse the configuration, we immediately configure ->fi and ->be for
all proxies.

Upon session creation, s->fe and s->be are initialized to the proxy. Filters
are executed via s->fe->fi_prm and s->be->fi_prm. Servers are found in
s->be->be_prm.

