EC: Datapath - HTTP PUT handling

This patch is a first cut at adding erasure_coding type
policy support to the Swift proxy handler for HTTP PUT
requests.

Terminology:

 - object chunks: HTTP chunks received over wire
 - object segments: consecutive HTTP chunks buffered up to
   a min threshold for erasure coding before they are erasure
   coded
 - EC fragments: data and parity fragments generated when
   erasure coding transformation is applied to object segments
 - EC archive: concatenation of EC fragments
 - ec_ndata - number of EC data fragments
 - ec_nparity - number of EC parity fragments

Design notes and Assumptions:

 - Swift requires PyECLib for erasure code primitives
   (Hosted at bitbucket.org and pypi.org)

 - Rough flow of operations -

   - Proxy opens (ec_ndata + ec_nparity) backend requests to object servers
   - Proxy buffers HTTP chunks up-to a minimum segment size
     (defined at 1MB to start with)
   - Proxy feeds the assembled segment to PyECLib's encode() to
     get ec_ndata + ec_nparity fragments
   - Proxy sends the (ec_ndata + ec_nparity) fragments to the object servers
     to be _appended_ to the previous set
   - Proxy then continues with the next set of HTTP chunks

   - Object servers store objects which are EC archives (their
     contents are the concatenation of erasure coded fragments)
   - Object metadata changes: for 'etag', we store the md5sum
     of the EC archive object, as opposed to the non-EC case
     where we store md5sum of the entire object

 - Assumptions around PyECLib -

   - PyECLib gurantees that data/parity fragments are the same size
     (with appropriate padding added)
   - PyECLib generates a unique header for each erasure code fragment
     it generates on encode() - the header has the fragment size
   - PyECLib store a digest with each erasure coded fragment for
     integrity checking

Changes:

 - Proxy HTTP PUT request handling changes
   - Intercept EC request based on policy type
   - Validate ring replica count against (ec_ndata + ec_nparity)
   - Calculate EC quorum size for min_conns
   - Call into PyEClib to encode to client_chunk_size sized
     object chunks to generate (ec_ndata + ec_nparity) EC fragments.
   - Queue chunk EC fragments for writing to nodes

Under construction:

 - Unit test code

Change-Id: Ic31b563d355bfdd89204f791ec114e57a3dd1d8b
Implements: blueprint ec-proxy-work