(#18268) Specify service startup mode

This allows the service start mode to be specified on the command line as an
MSI parameter to the installer PUPPET_AGENT_STARTUP_MODE.

Valid choices are `Automatic` (default), `Manual` and `Disabled`. If you put in anything
besides these, it will default to `Automatic`.
Merge branch 'ticket/master/18268-specify_service_start_mode'

* ticket/master/18268-specify_service_start_mode:
  (#18268) Specify service startup mode
(#20281) Save the command line value to the correct property

Previously, the BeforeAppSearch custom actions were saving properties of the
form PUPPET_* to properties named [CMDLINE_PUPPET_*] where the brackets are
part of the name. The AppSearch actions would then overwrite the PUPPET_*
properties with the values from the registry, if any, from the very first
installation.

The AfterAppSearch custom actions would retrieve the values from
CMDLINE_PUPPET_*, but the values would be NULL, and so the custom actions would
never run.

This commit changes the BeforeAppSearch custom actions to write to the
CMDLINE_PUPPET_* properties instead of [CMDLINE_PUPPET_*] so that they can be
retrieved correctly. As a result, any property specified on the command line
will override any value that was entered previously.

Note values entered on the command line will not overwrite values in
puppet.conf due to our use of createLine instead of addLine, and that will be
fixed in a future commit.

Paired-with: Rob Reynolds <rob@puppetlabs.com>
(#21243) Allow windows service to run as different users

Previously, the puppet windows service always ran as the LocalSystem account,
which is fairly standard for agents that need to install arbitrary packages,
modify file permissions, etc.

However, the LocalSystem account does not have any credentials with which to
access network resources, e.g. SMB network shares. As a result, the standard
way of handling this is to run the service under a domain service account, and
add the service to the local administrators group on the computer.

This commit allows the service domain, account and password to be specified.
The account must already exist. The installer will grant the logon as a service
right to the account, and will add the account to the local Administrators
group.

If the account does not exist, the install will fail. If you've enabled
logging, e.g. /l*v install.log, you should see:

    Error 0x80070534: Failed to get SID for user: .\albert

If the password is wrong, the install will fail with:

    Error 1920. Service 'Puppet Agent' (puppet) failed to start.
    Verify that you have sufficient privileges to start system services.

If the service is currently running as something other than LocalSystem, then
you must re-specify the credentials when installing a new version. Otherwise,
the service will revert back to the default LocalSystem account.

To specify a local account, then specify the domain as the following:

    PUPPET_AGENT_ACCOUNT_DOMAIN=%COMPUTERNAME%