Merge pull request #80 from pkit/script

added another channel `/dev/script`
produce better error codes

if one of the queries in clustered environment failed, the final response was still "200 OK"
now the server will choose `max(all_error_codes)` as a final error code and return it to user instead of "200 OK"
correct error messages for each particular task (if any) can still be parsed from `X-Nexe-Error` response header
Merge pull request #81 from pkit/error_codes

produce better error codes
refactor channel mangling in config parser

the function `_add_new_channel` was too opaque and created things under the hood
the function `_get_new_node` was mutable
now it should be clear what's going on just from looking into the `parse()` flow
fix nodes with only networked channels

the nodes that had only network channels attached would not show in final config
it lead to various strange errors, like `zvm://` urls not being resolvable
Merge pull request #79 from pkit/bug_fix

fix nodes with only networked channels
doc/requests: mention that job description is cached
doc/requests: combine two repetitive paragraphs
doc/requests: use precise format for variables

The double quotes are not actually part of the variable syntax.
doc/requests: add details about variable interpolation
Merge pull request #85 from mgeisler/doc-requests

Add more detail to requests doc about variable interpolation
test: use `send`, not `sendto` on connected socket

According to the Python docs
(https://docs.python.org/2/library/socket.html#socket.socket.sendto),
you should not use `socket.sendto` if a socket is already connected.

Linux (Ubuntu 12.04) seems to be forgiving of this behavior, but when I
run tests on OSX, I get several `socket.error: [Errno 56] Socket is
already connected` errors in the test suite.

This behavior can be demonstrated with the following Python script:

---
import socket

receiver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sender = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

addr = ('127.0.0.1', 27000)
receiver.bind(addr)
sender.connect(addr)

num_bytes = sender.send(b'foo')
print('Received: %s' % receiver.recv(num_bytes))

num_bytes = sender.sendto(b'bar', addr)
print('Received: %s' % receiver.recv(num_bytes))
---

On Linux, this works and the received messages are printed.
On OSX, the `sendto` calls raises a `Socket is already connected` error.
Merge pull request #87 from larsbutler/fix-test-suite-socket-send

test: use `send`, not `sendto` on connected socket
added optional `name` argument to `exe` property

The new job description property `exe.name` is introduced by the patch
It allows user to explicitly set a name for executable (the value of `ARGV[0]`)
The property is optional, if not supplied, the default method for setting `ARGV[0]` will be used
Currently the default is to set it to "node name"
Docs updated.
Merge pull request #89 from pkit/exe_name

added optional `name` argument to `exe` property
added doc changes for `script` channel

added the `script` channel to Servlet docs