Add a class for generating random identifiers

Will be useful for all kinds of things, but brought about in discussions
specifically for Util::EXE in #2037.
Make first char's character class configurable
Store inverted hash for better lookups

Also clarifies comment about infinite loops
Land #2087, @egypt's random ID generator
update open_browser functionality

open_browser didn't support xdg-open or firefox-bin.  xdg-open was made the default as it is the most likely to succeed afaik.

the fallback to firefox was removed because since we check for the existence of firefox is makes no sense to try to run it after we failed to find it.  This will silently fail if no supported browser is found due to suggestions from the msf team:

< Zero_Chaos> more importantly, it would be great if someone told me how to spit out a message to the user
< Zero_Chaos> because I have no clue :-)
<@egypt> Zero_Chaos: it's in rex, so the answer is "don't"
Move from DLink to D-Link
Land #2149, another good @todb-r7 English thing
Update comment docs on Rex::Compat.open_browser
Land #2148, prefer xdg-open over sensible-browser
Adding back default firefox

the default is triggered only outside the case statement, which itself
is totally bizarre. I can't tell if anyone is relying on this behavior
right now, but it's too premature to just remove it out at this point.