Move session ID creation into SessionFactory

Rationale: a session requires an ID, but otherwise should be
agnostic about the implementation details.  A SessionFactory
implementation might have special requirements for a session ID.

This commit moves the random ID generation into SessionFactory
as a default ID, but in a way that allows overriding by a
consuming class.

The session object memory address is removed from the input
to the hash function (as the ID is generated before the object
exists), but this is a very small loss of entropy.

If more entropy were desired, the length of the shuffled random
string could be increased to compensate.
Merge branch 'review/dagolden/topic/session-fixes'
hooks for SessionFctory
test session hook
Merge branch 'topic/session-hooks'
add more doco todos.

I'm going to be a busy man when I have a moment to sink my teeth into these
keyword exclusion at import time now works. DSL is loaded at import time, allowing for custom DSL
use DancerModuleLoader, ported from dancer 1
Merge branch 'topic/keywords-and-custom-dsl'
pass context to 404 error

Sound help for GH #86
create an app to deal with the 404s
Merge branch 'give-context-to-error' into HEAD
Bump version in dist.ini
frist Changes file for release 1.9999_01
Merge branch 'release/1.9999_01'
Make sure everything works with VERSION 1.9999_01

The api_version thingy defaults to 2, we are Dancer 2.
Updated tests accordingly.
The api_version is the real information we want to check for plugins

Here, Dancer is 1.9999 but the API version is 2.
removed irrevelant test about version
reflect Changes
Bump version