SI-8100 - prevent possible SOE during Stream#flatten.

This commit changes stream flatten to avoid allocating a
stack frame for every stream item. Previously, flattening
a stream whose elements are mostly empty would result in
a StackOverflowException.

This commit also adds a test demonstrating the problem.
SI-7469 Remove misc. @deprecated elements
SI-7544 StringContext.f docs update

Correct the scaladoc to reflect how f"%" is handled,
namely, it's no longer taken as f"%%".
Quasi-comprehensive BigDecimal soundness/correctness fix.

This fixes issues SI-6153, SI-6173, SI-6456, SI-6699, and SI-8116, along with a number of other similar possible issues.

Relevant changes include
  * Changes to avoid heap explosion when working with BigInt
    - to isWhole
    - to hashCode
    - to equals
    - to BigInt's equals
  * Changes to enable equality matching hashCode
    - Only for sufficiently small BigInt
    - For identical values with different precision
  * Changes to isValidDouble
    - Takes precision into account now
    - New methods added to test whether even if the Double is not represented exactly, it's a representation of a certain type
    - New companion methods added to allow intended expansion of Double (binary/decimal difference)
  * Changes to constructor
    - Null arguments are not allowed (these can throw NPEs later at awkward/unexpected times)
  * New JUnit test to test all these things
  * Fixed existing tests to expect new behavior
  * Modified scaladocs to explain the issues
  * Deprecated problematic methods
  * Made application of MathContext more consistent (it is where you expect it and not where you don't)

These changes are coordinated, for the most part, hence the monolithic
commit.
SI-6457 ImmutableSetFactory.empty results in StackOverflowError

ImmutableSetFactory relies upon empty to create its builder, which in turn relies upon its builder to create an empty.  Added an emptyInstance method to hold the actual empty set (which also removes duplicated functionality for empty sets).

No test, as the original pattern:

  object Factory extends collection.generic.ImmutableSetFactory[collection.immutable.Set] {}

no longer compiles.  This should be verified by whoever checks this commit, but this kind of change is hard to revert by accident.  No reason to waste resources checking it forevermore.
SI-6196 - Set should implement filter

Implements a version of filter and filterNot that reuses as much as
possible from the existing tree instead of building an entirely new one
like the builder-based filter does. This results in significant performance
improvements on average.

Adds a test of basic correctness of filter and filterNot as well as of the
desirable properties of the new filter implementation.

This is a collaboration between me and @Ichoran
SI-6200 - HashMap should implement filter

This is the exact same algorithm as in SI-6196, with only slight
differences due to the two type arguments of HashMap.

Filter is tested by the new comparative collection test by @Ichoran, but
there is nevertheless a small correctness test in t6200 in addition to
tests of the new desirable behavior.
Merge pull request #3293 from soc/SI-7469

 Remove misc. @deprecated elements
Merge pull request #3304 from non/bug/stream-flatten2-8100

SI-8100 - prevent possible SOE during Stream#flatten.
Merge pull request #3316 from Ichoran/topic/big-decimal-correctness

Quasi-comprehensive BigDecimal soundness/correctness fix.
Merge pull request #3366 from Ichoran/issue/6457

SI-6457 ImmutableSetFactory.empty results in StackOverflowError
Merge pull request #3362 from som-snytt/issue/7544-scaladoc

SI-7544 StringContext.f docs update
Merge pull request #3318 from rklaehn/issue/6196

SI-6196 - Set should implement filter