(#19162) Support reboot on refresh

This commit updates the reboot type and windows provider to reboot when
the resource is refreshed in response to another resource's event, e.g.
package installed.

It fixes a bug when executing `puppet resource reboot` due to the instances
method not being defined.

It adds tests for the reboot type, the base provider, and the windows
provider.

It adds a timeout parameter to control how far in the future the reboot
should be performed (from when it's been requested).

Paired-with: Josh Cooper <josh@puppetlabs.com>
(#19162) Support immediate reboots

This commit changes the `when` parameter to a property, so that we can
manage the reboot pending state of the system.

It adds a `:immediate` value which if set will perform a reboot immediately
regardless of whether a reboot is pending or not.