request.user and request.key as lazy objects
add concept of type to Key
add method and middleware to obtain key suitability for a given request
fix tests