On each client connection, a new socket is created and connected to a slave server. This is done in several steps:
0. Regular expression match is performed on the request URI until a match is found. A list of slave servers and a balancing algorithm is determined based on that match.
1. A balancing function is invoked and a list of slave servers is passed to it. There is one function for each balancing algorithm.
2. The balancing function determines which slave server to use (this is algorithm-dependent).
3. A new socket is created and connected to the chosen slave server. The socket is set to non-blocking mode. If a connection can not be established, step 2 is repeated. If all the slave servers fail, an error is returned.

Naïve
	Simple, non-fair load balancer with almost no overhead.
	Connects to the first alive server, starting from server.

First-Alive
	Simple, non-fair load balancer with almost no overhead.
	Connects to the first alive server, starting from 0.

LocklessRoundRobin
	Simple load balancer with almost no overhead. Race conditions are possible under heavy load, but they will just lead to unfair sharing of the load.
	Each consecutive call connects to the next available server. Race conditions can occur since no locking is performed.

LockingRoundRobin
	Simple load balancer. Race conditions are prevented with mutexes. This adds significant overhead under heavy load.
	Each consecutive call connects to the next available server. Race conditions are prevented at the expense of performance.

LeastConnections
	Ensures equal load in most use cases. All servers are traversed to find the one with least connections.
	Connects to the server with the least number of connections. Ensures equal load in most use cases but adds significant overhead.

SourceHash
	Ensures that each consecutive request from a given client will be handled by the same server. This allows each slave server to work independently.
	Simple, fast load balancer based on request IP address. Non-fair balancing is possible under special circumstances.

Weighted Round Robin can be done by entering the same server several times in the Round Robin blancer section. Example:

[PROXY_ENTRY]
    ServerList 127.0.0.1:80 127.0.0.1:81 127.0.0.1:80 127.0.0.1:82 127.0.0.1:80 127.0.0.1:81
    LoadBalancer RoundRobin
    Match ^/.*
This can be read as:
127.0.0.1:80	weight=3
127.0.0.1:81	weight=2
127.0.0.1:82	weight=1

HighAvailability Options (must be set in PROXY_DEFAULTS
OfflineTimeOut -> Seconds to wait for the next check of the server.
AttemptsCount -> How many attempts to be made, before assuming that the server is offline.

Proxy Statistics : To enable the statistics you must put StatisticsURL in PROXY_DEFAULTS

TODO
	is the Naïve algorithm really necessary?
	is there a need for designated support of weighted round robin
