Read kernel request in the session and build the request object using a reference to the data buffer
Move request parsing (extracting and checking the header) to the constructor function
Introduce channel sender objects
Pass a channel sender to every request and use it for replies (finally makes the real channel private to a session)
Introduce helper methods so that request `new` and `dispatch` can be kept private
Make header and data payload private in a request and provide public accessor methods instead
Pass the request object to every filesystem operation method
Pass a reply object to every filesystem operation method instead of using return values
Increase minor version number since the interface has significantly changed
Merge pull request #14 from zargony/concurrency

Concurrency

- The Session now receives packets using the channel and creates Request objects that reference the data to parse it
- The Request parses the data and dispatches operations to method calls
Filesystem methods now additionally get the (immutable) Request which can be used to get information on the request (unique id, uid, gid, pid). This object cannot be moved to a different task (lifetime issue since it contains only references to the real data buffer which gets reused for the next operation). So if a method needs this information, it must query them before spawning.
- Filesystem methods now don't return results, but get a (mutable) Reply object which must be used to report the result of the operation. This object can be moved to a different task, which allows an implementation to do work concurrently and report the result later. This will also soon allow to reply large amount of data without copying it, because we can now send a reply using references to the data. Not sending a reply at all or replying more than once is an error (which is now unfortunately checked at runtime, but the overhead should be bearable).