More typical concurrency model in RequestAgent
More typical concurrency model in SafetyFilter
More typical concurrency model in ReadSession
First pass of SafePacketProvider
Update session manager
Update main to use SafePacketProvider
Rewrite ReadSession
Extract ReadSession interface
Begin rewriting timeout controller

Still need to decide how to handle finished case for timeout controller
and read session
TimeoutController accepts onExpire callback
Try to clean up goroutine in timeout controller
ReadSession calls onFinish when finished
Decompose SessionManager into ReadSessionCollection
Add missing Resend method to ReadSession
Introduce SessionCreator
Update ServerConfig to use rewritten objects

Now main.go is capable of serving only files that are less than 1 packet
size (e.g. 512 bytes).
Add SessionRouter
SessionCreator uses TimeoutController
Merge branch 'cleaner-concurrency'