Parameterize CMS with type K

This change parameterizes the type K that is used to identify the
elements to be counted.  Previously, the CMS implementation hardcoded
`Long` as the type.  In other words, this change turns the hardcoded
CMS[K=Long] into a parameterized CMS[K].
Use require instead of assert to enforce contract

"If a static checker finds a violation of assert it considers it an
error in the code, while when require is violated it assumes the caller
is at fault."

This commit changes assert to require in those places where it is used
to validate input parameters.

See stackoverflow.com/questions/8002835
Test monoid laws of CMS for Byte, Short, Int, Long, BigInt
CMS: use a type alias to test K=Long in test spec
Use idiomatic ScalaTest matching style instead of asserts
CMS: test K in {Short, Int, Long, BigInt}
CMS: remove implicit for Byte
Reformat class parameters of CMSInstance
CMS: split responsibility of counting/freq estimation and heavy hitters tracking.
Improve documentation
Reorder classes and improve their docs
Improve documentation
Require at least d (aka depth) hash functions
Move TODO out of scaladoc
Move implicits to top of class
Do not shadow type parameter K of test suite
Add monoid laws test for Top-% CMS
Add default value (0.01) for heavyHittersPct
Uppercase Cms to CMS throughout all CMS-related classes
Revert 83b5133: Add default value (0.01) for heavyHittersPct

Providing default values leads to scalac errors, example::

  method aggregator$default$4:[K]=> Double and
  method aggregator$default$4:[K]=> Double
  have same type