(#1424) Make Struct::Passwd more platform agnostic

The nameservice_spec was failing with `ArgumentError: struct size
differs` on Windows, because the initialize method for Struct::Passwd
takes different sets of arguments depending on flags set when ruby was
compiled, e.g. HAVE_ST_PW_GECOS, HAVE_ST_PW_CHANGE, etc.

This commit modifies the test to create a Struct::Passwd object using
the 4 mandatory fields: name, password, uid, gid. Since the other
optional fields weren't used in the test, this seems like the safest
approach.

This commit also excludes the test that relies on Struct::Group, because
that class only exists if HAVE_GETGRENT is defined at compile time. This
commit skips the test when run on windows.
Merge branch 'dalen-modulo_operator'

* dalen-modulo_operator:
  (#18950) Add modulo operator

closes #1437
(#5129) Freeze variables after creating them

Variables are supposed to be immutable within a scope, so we freeze them
after creation to avoid any changes to them.