(#2437) Prepare tests that illustrate the issue

This patch takes the 3 examples provided in the issue description and
ensure that they fail when needed. It will help fixing the issue.
(#2437) Fix the first invocation of the class having bad parameters types

The first type we use Nagios::Base with a particular type, the method for
the parameters assignemtn are not present yet ; and it creates a side-
effect of changing the type of the parameters to Array.
It did break the rspec tests.
(#2437) Complete the tests to detect a variety of edge cases
(#2437) Escape semicolon (;) when writing Nagios configuration files

In nagios configuration files, semicolon (;) indicates a comment, except
when it is escaped with a backslash (\).
If we output a value with an unescaped semicolon, it will be considered
as a comment by Nagios, also by Nagios::Parser and thus the part
after the semicolon, included, will be lost.
Escaping the semicolon ensures it will be taken into account by
both Nagios and Nagios::Parser.
Cf http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html
Cf xodtemplate.c in Nagios sources
(#2437) Fix the parser : comments, semicolon, ...

Lots of tightly coupled things here :
- The rules were modified to take care of an existing issue
that prevented to have full line comments (Starts with #) or
carriage returns just after a curly brace definition.
- The lexer was modified to consider an inline comment only
when a semicolon is not preceded by a backslash.
When a semicolon IS preceded by a backslash, it is considered
as escaped and is preserved (the escaping backslash is removed)
- The lexer was modified to allow pound (#) at every position
in a line (except the first character, which denotes a full
line comment)

Cf xodtemplate.c in Nagios source
(#2437) Compile the parser to ruby code

Parser is compiled with racc-1.4.9 while it was previously
compiled with racc-1.4.5 ; this causes a lot of cosmetic
changes and diffs.
(#2437) Comments can start with a pound (#) anywhere on an empty line

Nagios allows comments to start with a pound (#) anywhere on the line
if there are only spaces and/or tabs before.
This commit adds a test case for this, and fixes the parser accordingly.
(#2437) Prefer StringScanner in lexer (performance)

The lexer was previously doing multiple string manipulations.
My previous commits fixed the lexer, but introduced a 6x time
penalty compared to the original lexer, which was hard to remove.
Using StringScanner instead of strings substitutions is even
faster than the original lexer.
(#2437) Parser now using StringScanner in lexer (performance)
(#2437) Cosmetic changes for the tests
(#2437) Regex compatibility with Ruby 1.8.x

In the previous commits I was using negative lookbehind, which
are only available in Ruby 1.9+.
Rewritten using a different logic which now works on both versions
of Ruby
(#2437) For ruby 1.9, always consider input text as ASCII
(maint) Fixing build error on windows caused by command with unix path
cosmetic changes to package providers
(#22110) apply tags regex to catalog tags
(#22499) Puppet manages owner/group of own vardir

lib/puppet/defaults.rb has :vardir as a directory setting, but did not
specify an owner or group.  If the user/group is changed and puppet is
restarted with a --mkusers setting, vardir will be owned by the previous
user uid, and puppet master will fail to access information under
/var/lib/puppet (if permissions are strict enough).  This first
manifests as an inability to read the ca cert under
/var/lib/puppet/ssl/certs.  (This assumes running puppet master as root,
which will attempt to manage settings as the service user 'puppet' and
then daemonize as puppet).

This change addes :owner, :group settings of 'service' to the :vardir
entry.
Merge pull request #1865 from ptomulik/package_cosmetics

cosmetic changes to package providers
Merge pull request #1891 from jpartlow/issue/master/22273-puppet-manages-var-lib-puppet-owner-and-group

(22273) Puppet manages owner/group of own vardir
(maint) Add parentheses in function calls

These tests were missing paretheses around arguments in calls.
(#22498) Stop future parser from interpreting 0 as 00 (octal 0).

The rule for determening radix interpreted '0' as an octal number.
When transforming it to a String it became '00'.

This changes the octal recognition to make '0' be interpreted as
being decimal.

Tests checks that '0' and '00' both work.