Better support for overloading start and destroy methods in Session

Move functionality from static start and destroy functions into instance
methods, allowing these to be overloaded. This works the same way as
calling Session::set() which then in turn calls inst_set()

Additionally use Injector to create the default Session instance to
allow the class to be swapped out.
I think you're right. Session::start() would now call current_session(), create a new Session instance into $default_session but setting $this->data on it to empty array, so when session_start() gets called later in Session::start(), the contents of $_SESSION don't get set into $this->data properly.