Introduce lazy sessions

Session contexts are only created when requests actually change data,
instead of creating contexts whenever a session starts.
Cleanup usage of boost optional
Merge pull request #277 from bastih/feature/lazy_sessions

lazy sessions