Serf 0.2 [2008-06-06, r1188]
  Enable use of external event loop: serf_create_context_ex.
  Enable adding new requests at the beginning of the request queue.
  Handle 'Connection:close' headers.
  Enable limiting the number of outstanding requests.
  Add readline function to simple buckets.
  Concatenate repeated headers using comma as separator, as per RFC 2616,
   section 4.2. (Issue 29)
  Add proxy server support.
  Add progress feedback support. (Issue 11)
  Provide new API to simplify use of proxy and progress feedback support.
  Add callback to validate SSL server certificates. (Issue 31)
  Add new test framework.
  Send current version string in the test programs (Issue 21)
  Bugfixes:
     Fix segfault with epoll when removing a NULL socket.
     Reset OpenSSL thread-safety callbacks when apr_terminate() called.
     Do not remove the socket from the pollset on pool cleanup.
     Do not issue double close on skt w/second one being close(-1) (Issue 33)

Serf 0.1.2 [2007-6-18, r1114]
  Enable thread-safety with OpenSSL (Issue 19)
  Teach serfmake to install headers into include/serf-0.
  Be more tolerant when servers close the connection without telling us.
  Do not open the connection until we have requests to deliver.
  Fix serfmake to produce the library that corresponds to the minor version.
  Fix a memory leak with the socket bucket (Issue 14)
  Fix uninitialized branch in serf_spider (Issue 15)

Serf 0.1.1 [2007-5-12, r1105]
  Add SSL client certificate support
  Implement optimized iovec reads for header buckets
  Fix up 'make clean' and 'make distclean' (Issues 9, 10)
  Add SERF_VERSION_AT_LEAST macro
  Remove abort() calls (Issue 13)

Serf 0.1.0 [2006-12-14, r1087]
  Initial Packaged Release
