Basic cores check for entitlements

- Check if cores are covered in non-stacking entitlement.
- Check if cores are covered when determining status.
Include cores when finding stacking pools
Properly support multi-attribute compliance/stacking

Compliance Notes:
If an attribute was not set on an entitlement (stacked
or not), it would be considered as supplying an Infinite
quantity of that attribute towards a consumer. In a
stacking scenario, an stacked entitlement not providing
enough sockets for example, could be covered by a stacked
ent providing cores, but not sockets.

This has been changed such that if a product attribute is
not set:
  - a non-stacked ent will ignore it when determining
    compliance.
  - a stacked ent will contribute 0 to the overall attribute
    value count.

Autobind/Healing Notes:
With the additon of stacking on multiple product attributes,
when an autobind/heal was performed we needed to be able to
determine which pool to select based on best coverage across
all specified attributes, instead of just sockets. To do this,
we determine what percentage of attributes each pool covers,
and we take the one with the best coverage percentage.

Refactoring done along with this change.
- stacks are now tracked using a stack tracker to
  keep track the quantities covered by stacked ents.
- A CoverageCalculator JS object is now being used
  to determine consumer coverage in one place.
- A FactValueCalculator JS object is now used to calculate
  the consumer value to be used when determining coverage.
- Created an autobind JS context to convert compliance
  pools to our helper style pool objects.
- Moved attribute name strings to constants.
- removed some dead code.
Unit and spec tests with corrections to code

Added core/socket spec tests and core/ram/socket spec tests.
Adding cores fact calculation to FactValueCalculator

This was carryover from merging wottops commit,
which added cores calculation.
A product attribute that has a value of '0' is considered not set.

This concept was removed, but should not have been as
it caused a lot of edge cases.
Added comments to rules file.
Moved rules namespaces to top of file
Added capability to stack on RAM.

- Added RAM attribute as stackable.
- skip pre_ram warning if ram is stackable.
- Added tests for ensuring ram can be stacked
Removed debugging debug statements that were cluttering logs.
In pre_cores use FactValueCalculator to get consumer cores.
Properly track arch on stacks and calculate compliance.

- track arch on a stack as a list of comma seperated arch
  strings.
- When determining coverage, check each string in the list
  make sure that it covers the consumer.