[RFC] allow syntax sugar for automatically generating routes from procs as in D:vibe's registerWebInterface
/cc @Araq @dom96 

in D [vibe](http://vibed.org/docs), is D's analog to jester. Some ideas could be borrowed, one of them is a nice syntax sugar to avoid boilerplate in defining routes:
see docs for [registerWebInterface](http://vibed.org/api/vibe.web.web/registerWebInterface):

```d
// snippet; see full example in http://vibed.org/api/vibe.web.web/registerWebInterface
class WebService {
// automatically mapped to: POST /login (all this is customizable, see docs)
//  input request is JSON that is automatically deserialized to this function's input
//  {"username": "bob", "password": "1234", "age" : 15. "scores" : [ 1.2, 3.4 ] }
// this functions' output  (here an associative array) is automatically serialized to JSON
auto postLogin(string username, string password, int age, double[] scores){
  return ["foo" : 21, "bar": 23];
}
// etc with other functions that map to other routes
}
void main(){
  new URLRouter.registerWebInterface(new WebService); // ...
}
```

in Nim/jester this could look like:
```nim
routesMagic:
  proc postLogin(username: string, password: string, age: int, scores: seq[float]): auto = {"foo" : 21, "bar": 23}.toTable
  proc getDateQuery(date: Datetime, id: string): auto = mongo.query(date = date, id = id)

registerWebInterface(routesMagic, serverSettings)
```

Likewise, `registerWebInterface(myProc, myServer, myOptions = nil)` can also be used to add a single route to a server

## avoids boilerplate
currently we have to manually deserialize request.params, pass the deserialized arguments to a proc, call the proc, convert to json (for eg) and call `resp`

## note
in D, all this is customizable (eg the post vs get, using a different path for a function name etc) via UDA (user defined attributes), but the **defaults are often good enough** and simple things map to really simple code that just looks like normal function (hiding serialization / deserialization except when necessary to to some customization)

in Nim, this can all be achieved as well (eg using jester specific pragmas), all it requires is compile time reflection

## implementation
* for each proc/template P in a scope (eg routesMagic), compute TInput = tuple of input argument types, Toutput = output type
* then create a route eg if P.name=postLogin:
```nim
/"login":
  let tInput = request.params.deserializeJsonTo(TInput)
  let result = call proc P with tInput
  resp result.toJson()
```

