Expose proto

we make `lib/request` and stuff prototypes again and create instances using `Object.create()`. this allows you to do stuff like:

```js
app.context.__defineGetter__('session', function () {
  return new Session(this)
})
```

and stuff. this is how express currently works. however, i think we should keep these exposed prototypes undocumented. 

now the other modules like basic auth and body parsing will work by wrapping `require('basic-auth')(app, options)`.