(#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
21760/22005 update preflight to delete old lib dir

In order to install in the top-level site_ruby directory, we need to clean out
any installs in the old site_ruby/1.8 location. We're doing this by setting a
variable in the package:apple task. If it's set, we remove all files there as
well as files in the new location.

While I'm here:
* update erb to strip leading and trailing spaces
* validate critical variables so a script is never generated with dangerous paths
* only target top-level files/dirs in lib, since we're doing rm -RF anyway
(#22129) force explicit file content to be treated as a bytestring

This replicates the implicit behavior in Ruby-1.8.7, and avoids chasing
down every location where a value is passed to `should=` and setting the
encoding there.
use :if so rspec sees the test even if it's not executed
(#22206) Add option to disable default schedules
Use Dir.glob(), don't require rubygems or rake, use Dir.chdir as a block
use instance_variable_get instead of eval
(Maint) Remove whitespace errors

A lot of blank lines had picked up extra spaces.