fix update_metadata()

it was checking for length of keys, without using full key length
refactored slightly to be more flexible
use tar pax headers for better header support

this patch removes sysmap bounce from objectquery to proxyquery
instead all the headers per channel are transferred inside tar metadata (PAX POSIX.1-2001)
by using pax headers we can attach a full set of HTTP-like headers to each and every channel we return from objectquery
it simplifies internal logic and allows for better CGI support in the future
better pass response headers to user

this patch will pass as many headers as possible from the output of user script/application to the appropriate channels
it is mainly useful for channels of `message/cgi` or `message/http` type
for these channels all their output headers and their status will be passed on to the final reponse the user gets
of course it means that `message/cgi` or `message/http` channel should have no `path` defined
caveats:
- if you define clustered job and have multiple output channels without `path` their bodies will be concatenated as usual, but their headers will overwrite one another in an undefined way, beware!
- if you defined multiple `message/cgi` or `message/http` channels without path the results will be even stranger than that, beware!
Merge pull request #105 from pkit/job_chain

better pass response headers to user
fix x-nexe- headers bug

fix bug introduced in c776351f1461f973bda83cb8f919c982b3fbf07e
that allows user to overwrite `X-Nexe-` headers in response
Merge pull request #107 from pkit/bug_fix

fix x-nexe- headers bug
move timout setup as early as possible
implement simple job chaining

this patch adds another middleware `ChainMiddleware`
the middleware allows rescheduling of response from previous job as a new job
for the chain to work the following statements should be true:
- response should contain `X-Zerovm-Execute: 1.0` header
- response should contain `Content-Type: application/json` header, and effectively be a json job description

you can see that the application that tries to chain something should be able to set a _response header_
which means that application MUST use `message/cgi` or `message/http` as its output channel content type
ChainMiddleware MUST be placed anywhere before ProxyQueryMiddleware in the proxy-server pipeline

example job description that can output a chained job is:

	[
            {
                'name': 'http',
                'exec': {'path': 'swift://a/c/chainer'},
                'devices': [
                    {
                        'name': 'stdout',
                        'content_type': 'message/http'
                    }
                ]
            }
	]

as you can see, stdout has no path - will be sent to user, and its content_type is `message/http`