Better handling and UX for missing and expired guard descriptors

Split off legacy/trac#31657 (moved):

Replying to teor:

How do we reliably detect pathological cases? Suppress the message, until it occurs a few times within a short timeframe?

dgoulet:

That's a good question I don't have an answer for.

Unfortunately, I don't think that's the kind of message that occurs multiple times, looking at legacy/trac#30746 (moved) (and friends) this seems to be able to cause havoc with just a single repeatition.

I'm not sure why this is the case, since router_have_minimum_dir_info() seems to be called all the time and that should eventually call entry_guards_get_err_str_if_dir_info_missing() which is the source of the log message... Things are kinda messy between these two functions tho, so it's kinda hard to understand what's the issue.