Module::Instance caching

[#56005352]

* Make Mdm::Platform a nested set: all Windows platforms can be derived
  from Mdm::Platform.where(fully_qualified_name: 'Windows').self_and_descendant
* Use new Metasploit::Model mixin modules for class that previously did
  not have a mixin
* Validation associations so that they have the correct number when the
  module_type of the module_class supports the association attribute.
* Fix actions and default_action; and targets and default_target (using
  inverse option) so that lookups and record creation works.
* Support searching for architectures and platforms attributes as sets
  instead of simple string/integers.
* Seed Mdm::Platform using the new
  Metasploit::Model::Platform.each_seed_attributes.
* Use namespace_name convention shared examples for testing classes that
  use Metasploit::Model mixins.
* Fix factories to obey attribute support restrictions base on
  module_type for module_class for module_instances.