Draw login prompts and implement ticket management

Not sure this is quite how I want to do this, but it's something. Things I'll
need to support later:

- In "remember authorization mode", Webathena should provide a non-interactive
  asynchronous ticket mechanism.
- Cache auth token, even with ticket has expired.
- Periodically renew auth token while we have tickets.
- When auth token is expiring and we can't renew, display a non-blocking
  prompt.
- When zephyr creds have expired and inner demon is missing creds, display a
  non-blocking prompt.
- When auth token is expiring and we cannot renew, display a non-blocking
  prompt.
- If the user tried to take an action and we were missing creds, display a
  blocking prompt. Or just go straight to Webathena. I think the blocking
  prompt is just needed when scrolling around?

Yeah, I dunno. This code will probably be ripped apart and rebuilt later. It's
possible promises are not a convenient model here?