(pup-954) Correct flaws in the Pattern Type implementation

* it used AND semantics instead of OR
* it did not accept a Pattern or Regexp as pattern parameter
* it was not assignable by an Enum with matching strings
(maint) Fix type calculations for Variant

Type calculations for variant were wrong (and one of the test
where also wrong).

This corrects the logic; when combining two variants, does types that
are assignable to one in the other are not included (the more general
"shadows" the more specific). Also, when calculating assignability
involving the Data type, a compatible variant must be considered equal;
a Data type is after all just a pre-packaged variant.
(pup-954) Fix issues with typesystem's handling of inference.

This adds additional inference methods:
* infer_generic - a non instance specific result
* infer_set - a non reducing/combining inference
* generalize! - changes instance specific to generic

This makes it possible to evaluate expressions like:
[1,a] =~ Array[Variant[Integer, String]]

This failed previously as the result was that Array[Literal] is
not assignable to either of the two more specific types.
(pup-954) Fix failing test for Ruby 1.8.7 (hash entry order)

One test relied on the order of hash elements which Ruby 1.8.7 does not
guarantee.
(PUP-954) Remove commented out debugger breakpoint
Merge pull request #2135 from hlindberg/issue/pup_954-the-pattern-type-is-not-ciorrectly-implemented

(pup-954) Correct flaws in the Pattern Type implementation