(#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
(Maint) Convert to new block expects
(#22471) Rescue errors specific to the YAML parser

The different yaml parsers, which are used in different versions of
ruby, end up throwing incompatible errors when loading data. The
Psych::SyntaxError that is thrown by the ruby 1.9 Psych parser is not
catchable by a generic `rescue => detail` block. Instead it needs to
explicitly call out the errors that need to be rescued.

This duplicates the error logic in Puppet::Indirector::Yaml.
(Maint) Simplify code

There was some unused code, overly complicated conditionals, and a use
of YAML that didn't use the built in writing to a stream.
(Maint) Stop asserting nothingness

Assertions that something doesn't raise an error, are not normally very
useful. In the case of these tests they only served to obscure the test
that was actually being done.
(#22471) Extract YAML interaction into shared code

The extra logic that is needed to interact with both Psych and Syck was
duplicated in the Puppet::Util::Storage and Puppet::Indirector::Yaml
classes. This pulls out a common module that wraps YAML and provides
consistent, and safe, semantics for using YAML for reading and writing.

This also removes the check ofr ::ArgumentError in addition to
::StandardError because it seems that ::ArgumentError is a sublcass of
::StandardError.
(#22471) Remove duplication by using Puppet::Util::Yaml

The new Puppet::Util::Yaml provides a common way of dealing with YAML
differences across ruby versions. This changes to two places in the
codebase that cared about these differences to use this common code.
(#22384) Log 404 and 406 responses at info

When the specific exception classes for HTTP control flow were
introduced, they ended up changing the logging from info to notice.
Notice is a much more severe level, which doesn't warrant having simple
file not found errors showing up at it. This changes the level back to
info.