So I figured it out except for the streaming. As long all the headers for the multipart chunks have the same name (Content-Disposition: form-data; name=\"some_name\"), all the data will be grouped together in a WEBrick::HTTPUtils::FormData object, accessed using:
request.query['some_name']
and each data element can be iterated over in order using:
request.query['some_name'].each_data {|data| puts data.to_s}