(PUP-2240) Add unfold of array using splat unary * operator

This adds the ability to unfold values into individual parameters
and entries in lists the same way as this is done in Ruby.
(PUP-2240) Fix failing test (hash order ruby 1.8.7)
(maint) Remove calls to removed function

On master, the extra check if a function was available before evaluating
arguments was removed. The rebased code still had this call.
(PUP-2287) Fix lambda param with default is always choosen

This fixes the problem that a lambda parameter with a default always
was choosen even if a value was given for the parameter.

The expected behavior for function calls is that only truly missing (non
given) arguments are subjects to default value replacement, not if a
value is nil or undef. (This because functions are call by position, and
not call by name as for defines and classes). Thus all nil/undef values
are treated as any other value.

One test for the map function relied on the now fixed bug and it has
been marked pending, as it should be updated once the map function has
been transitioned to the new function API. (Where undef is not
transformed to empty string).
(maint) Update test using old style initialization of loaders

The API for creating loaders was changed (now requiring an environment).
This updates the logic that used the old API.
(PUP-2014) Make gem provider match on a single gem name

Currently the gem provider will match gemname$, for example with bundler
this will return quite a long list of anything ending with bundler. When
a match returns a longer list, it will actually connect and try to pull
the latest gem again, thus increasing the WAN usage and rubygems.org
usage when not necessary.

The proposed fix adds a ^ in front of the name var to ensure it begins
with the gemname.
Merge branch 'pull-2455'
(maint) Fix Travis failures for 2.1.0 and 1.8.7.

Working around RVM issues on Travis CI by explicitly specifying the
patch level for 1.8.7 so that REE isn't used.

Working around an install issue with 2.1.0 by specifying 2.1.1 instead
of 2.1.0.
Merge pull request #2610 from peterhuene/travis/fix

(maint) Fix Travis failures for 2.1.0 and 1.8.7.
(maint) Fix two spec tests to be robust when running in a path with parens

Both of these spec tests were including the working directory (via
the 'envdir' variable) in the regex to match against, but did so without
properly escaping the directory path. This meant that if the working
directory path included parentheses they were interpreted as regex
symbols rather than bare parentheses.

This could be fixed by wrapping the envdir in Regexp.escape, but
the path isn't really important to check for in this warning message,
so I just removed it from the regex.
Merge remote-tracking branch 'origin/stable'
(PUP-957) Remove special meaning of Regexp[r] in =~ !~ expressions.

There are several issues with the previously implemented support
where a parameterized Regexp was a stand in for a real regular
expression:
* The match variables where not set (and would be difficult to return
  in general since Regexp's and Patterns can be nested in other types).
* Blurry line between what a Regexp type is, and String since Regexp[r]
produces a RegularExpression Type, not a Regexp instance.

This simply removes the special handling. A user can still use:

* Regexp (/..../)
* A String - transforms to a Regexp
* Pattern[p] type (since it is a real subtype of String)
(maint) Fix type parser arg count errors and handling of regexp
(PUP-957) Add match function that returns matched result as array.

The function handles matching of String, and Array[String] against:
* regexp
* string
* Regexp type
* Pattern type
(PUP-957) Add checks for match against "any regular expression"
Merge pull request #2617 from hlindberg/pup-957_match-vars-and-regexp-type

(PUP-957) Change match operator wrt. Regexp type and add match function
(PUP-2240) Refactor unfold behavior into common method

A private evaluator method called unfold is added to handle
the case of iterating and evaluating an array of expressions where
an UnfoldExpressionExpressions should be unfolded/expanded in-line.

This new method is then used in the places where unfold behavior
is supported.
(PUP-2287) Remove dead code paths, fix stale comments
Merge pull request #2532 from hlindberg/pup-2240_unfold-array

(PUP-2240) Add unfold of array using splat unary * operator
Merge pull request #2588 from hlindberg/pup-2287_lambda-default-always-ovrrides

(PUP-2287) Fix lambda param with default is always choosen