Move Msf::Payload::Type into its own file

MSP-9228
Merge exploit LHOST into each compatible payload instance

MSP-9228

Metasploit::Framework::Module::Target::Compatibility::Payload#payload_instance_compatible?
checks if the size of payload_instance fits in the target payload_space,
but checking the size of a payload_instance involves generating it and
substituting variables, like LHOST.  By default, LHOST is not set for
payloads and needs to come from the exploit data_store.  Therefore,
merge the exploit data_store into the payload_instance data_store in
Metasploit::Framework::Compatibility::Payload#each_compatible_payload.
share_data_store cannot be used because share_data_store would copy the
payload's options into the exploit's datastore.
Use target platform for command shells

MSP-9228

If #platform_fully_qualified_name is not set explicitly and exploit
target has only one platform, then use its fully_qualified_name.
struts_default_action_mapper automatic target sets data_store TARGET

MSP-9228

The command shell can only derive the platform when the target is
automatic if the automatic target handling actually modifies
data_store['TARGET'] to be the index of the non-automatic target index
that the auto-target selects.