Session cookie store with message verification.

This PR brings the ability to store signed session cookies.

```elixir
defmodule MyApp do
  use Plug.Router
  import Plug.Conn

  plug Plug.Session, store: :cookie, key: "_my_app_session", secret: System.get_env("SESSION_SECRET")
  
  get "/put_session" do
    conn = put_session(%{foo: :bar}
    session_cookie = get_session(conn)
    resp(conn, 200, session_cookie.foo)
  end
end
```
Why? Having a default key of nil does not look like a good idea?