Update exploit checks

Progress group 1: Making sure these checks comply with the new
guidelines. Please read: "How to write a check() method" found in
the wiki.
Make Meterpreter Session Address Resolution Sane

If MSF can not match the visible IP address of a Meterpreter session
to an interface--it will attempt to find an IP address associated
with a default route and use it as the session's address.

This commit fixes the logic associated with this process. The old
logic only considers one IP address per Interface, even though an
Interface may have multiple addresses/masks associated with it.

This flaw led to situations where MSF would favor an IPv6 link-local
address over the IPv4 address associated with the default route,
solely because the IPv4 address was not the first value in the
addresses array.

[FixRM #7259]
Saving progress

Progress group 2: Making sure these checks comply with the new
guidelines. Please read: "How to write a check() method" found in
the wiki.
Saving progress

Progress group 3: Making sure these checks comply with the new
guidelines. Please read: "How to write a check() method" found in
the wiki.
Saving progress

Progress group 4: Making sure these checks comply with the new
guidelines. Please read: "How to write a check() method" found in
the wiki.
Saving progress
Refactor load_session_info

All of this code is in sore need of some specs but I think this change
makes it a bit easier to understand what it is supposed to be doing.
Merge pull request #1 from jlee-r7/land-2897-meterpreter-interfaces

Refactor load_session_info
Progress
Oops, I broke this module
Add routine to check bad check codes
Update rspec for ms08_067 check

The original version doesn't return a check if the host is invalid,
looks like it was forgotten. The new version will return Unknown
instead.
Throw Unknown if connection times out
Address nil
Change check code
Remove to_s inside #{}
[FixRM #8749] - Make spawn_meterpreter respect lport/lhost options

[FixRM #8749] Basically the spawn_meterpreter script doesn't
actually allow the user to set their own LHOST/LPORT datastore
options, because they come from the session object, not from the
active module or the framework object.

The fix is to allow the user to config them from framework. But
if they forget to do this (because naturally people probably
assume that active module datastore options are the same as the
ones set in framework), then for LHOST, we default whatever we get
from Rex::Socket.source_address. As for LPORT, we'll pick a one
that's not used by any of the sessions.
Add Simple E-Document Arbitrary File Upload module
Update some checks
Land #2905, @wchen-r7's update of exploit checks