(#18110) Don't do recursive backup when not needed

First check if we are actually going to replace the directory before
starting to do a backup of it.
(#18110) spec tests for bug fix
(maint) refactor Type::File#remove_existing

Puppet::Type::File#remove_existing was providing too many behaviors and
was becoming unreadable. It checked if a file could be backed up,
performed the backup, failed if the backup failed, and conditionally
removed files and directories.

This commit refactors the method and extracts a number of different
methods that each implement a part of the behavior desired. This commit
also standardizes the return value of the method to boolean values and
adds some documentation on the method signature and exceptions raised.

Paired-With: Andy Parker <andy@puppetlabs.com>
(#19877) Add support the openwrt service provider

OpenWrt has its own unique initscript conventions, as well as
its own support for enabling and disabling services. This commit
adds support for them and for being the default provider for
OpenWrt platforms.
(#19877) Added opkg as a package provider

Opkg is the package manager for OpenWrt. This commit enables the
opkg package provider and sets it to be default for openwrt platforms.
(#19877) Enable automatic package list downloading for opkg

On OpenWrt package lists do not persist across reboots, often
requiring one to run "opkg update" before running opkg operations.

This commit enables detection for this, so puppet will fetch a
package list if it hasn't been downloaded yet, enabling package
installs to proceed as expected.