Fix error in type derivation for the sign in DECODE-FLOAT.

Type derivation of the sign of (DECODE-FLOAT X) returned the incorrect
value when x was declared to be of type (DOUBLE-FLOAT (0d0)).

 * src/compiler/float-tran.lisp
   * Fix type derivation
 * tests/float-tran.lisp
   * New file for tests of DECODE-FLOAT-SIGN-DERIVE-TYPE-AUX.
 * tests/float.lisp
   * New file to test that decode-float is compiled correctly.
Make (log (scale-float 1d0 k) 2) = k

 * src/code/irrat.lisp
   * Improve accuracy of log2 for the case when x=2^k. There might be
     some loss in accuracy for other values of x, however.
 * tests/float.lisp
   * Add test for log2(2^k) = k.