(#10162) add firewallchain type and iptables_chain provider

Add firewallchain type and iptables_chain provider. This is required
to support the firewall class and it is envisaged that an autorequire
will be used to automatically require the user chain. This type can also set
policies on inbuilt chains.

Provider covers ebtables (optional), iptables, ip6tables.
(#10162) Various fixes for firewallchain resource

* Convert commands to optional_commands to avoid iptables installation chicken
  & egg scenarios.
* Downcase tables to match the table names in xtables
* Force fully qualifying the name as <table>:<chain>:<protocol>, we can add
  meaningful defaults later.
* puppet resource <name> command wasn't working as expected, but stripping out
  some of the meaningful defaults I was able to get this to work.
* Reformat some of the code to avoid overrunning 80 chars where possible
* Remove trailing whitespace
* Add flush to provider so that resource modifications immediately update the
  resource in reports and when using puppet resource.
* Removed any commented out code
* Improved documentation
* Change policy so its undefined when not set, instead of being :empty
* Fix test mocking so they will run on a Mac
(#10162) Modify firewallchain name to be chain:table:protocol

We've decided to change the ordering of the namevar so that it is now:

    chain:table:protocol

So its closer to a linear hierachy ie. chain in table in protocol.

Previously this was table:chain:protocol which made less sense.
(#10162) Fix examples for firewallchain in README
Merge pull request #62 from kbarber/ticket/10162-firewallchain_support_for_merge

Ticket/10162 firewallchain support for merge
(#13192) Fix allvalidchain iteration

Before this patch, we were getting errors because chain & table were swapped
during creation.
Merge pull request #63 from kbarber/ticket/master/13192_allvalidchains_order

(#13192) Fix allvalidchain iteration
(#13201) Firewall autorequire Firewallchains

Autorequire Firewallchain resources for Firewall resources that have jump or
chain parameters. Remove require params from README examples now that
they're not essential.

Only deals with iptables and ip6tables providers, which have support for
chains. Doesn't attempt to weed out chains that might be builtin. Just let
Puppet determine which of the resources are really managed.
(#13201) Tests and docstring for chain autorequire

Test for autorequire behaviour on :chain, :jump, and :chain + :jump params.
With both specified and default/undef :table and :provider params.

Document autorequire behaviour in docstring.
Merge pull request #67 from dcarley/13201-autoreq_chain

(#13201) Firewall autorequire Firewallchains
(#13216) Fix README so setup instructions actually work

The old setup instructions were vague, and incorrect. This fixes those
instructions so they actually work, and breaks them out into their own
section.(#13216) Fix README so setup instructions actually work
Merge pull request #68 from kbarber/ticket/master/13216-fixed_setup_instructions_in_readme

(#13216) Fix README so setup instructions actually work
(#11305) Support vlan interfaces (interface containing ".")
(#11305) Add tests for VLAN support for iniface/outiface

This adds tests generally for iniface and outiface, and includes examples
of interfaces with VLAN's to support that change.
(#10619) Add the table when deleting rules

This fixes purging from tables other then 'filter'.
(#10619) Fix tests since we are now prefixing -t <table> during delete
Fix extraneous trailing whitespace
Merge pull request #61 from adamgibbins/master

Improved Puppet DSL style as per the guidelines.
Merge pull request #70 from kbarber/ticket/11305-support_vlan_interface

* (#11305) Support vlan interfaces
* (#11305) Add tests for VLAN support for iniface/outiface
Merge pull request #69 from kbarber/ticket/10619-Unable_to_purge_rules

* (#10619) Add the table when deleting rules
* (#10619) Fix tests since we are now prefixing -t <table> during delete
* Fix extraneous trailing whitespace