Allowed Uri classes to use a custom session if it's provided

It works and it includes tests and documentation :)
The LRU cache backport should be installed if the python version is below 3.3.