BigIngeter: new LeadingZeroCount helper method

- The new helper method LeadingZeroCount returns the number of bits
  that are set to 0 at the start of an uint.
[Performance] BigInteger: cast to double and float

- The new implementation converts directly to double or float.
BigInteger: added tests for double conversion
BigInteger: more test cases for cast to double
[Fix] BigInteger: improved cast to double

- Added overloads for PopulationCount and LeadingZeroCount that take ulong.
- Added helper method BuildDouble that constructs a double by sign, mantissa
  and exponent. This method truncates the mantissa, thus may differ in
  rounding to Math.Pow.
- The new implementation avoids Math.Pow by using BuildDouble.
- Passing all recently added tests.
[Fix] BigInteger: reimplemented cast to single (float)

- The new implementation casts to double and then to float.