[WIP] fixup wired-in BigNat

Note, this still results in a core lint-error due to unpacking:

  HC [stage 1] libraries/integer-gmp2/dist-install/build/GHC/Integer/Logarithms.o
  ghc-stage1: panic! (the 'impossible' happened)
  (GHC version 7.9.20140817 for x86_64-unknown-linux):
	Iface Lint failure
    In interface for GHC.Integer.Type
    Unfolding of sqrInteger
      <no location info>: Warning:
          In the expression: $wsqrBigNat dt
          Argument value doesn't match argument type:
          Fun type: ByteArray# -> BigNat
          Arg type: BigNat
          Arg: dt
    sqrInteger = \ (ds :: Integer) ->
                   case ds of wild {
                     SI# ds1 ->
                       case ds1 of ds2 {
                         __DEFAULT ->
                           let {
                             nsign :: Int#
                             [LclId, Str=DmdType]
                             nsign = uncheckedIShiftRA# ds2 63 } in
                           case tagToEnum#
                                  @ Bool (<=# (-# (xorI# ds2 nsign) nsign) 3037000499)
                           of wild1 {
                             False -> timesInt2Integer ds2 ds2;
                             True -> SI# (*# ds2 ds2)
                           };
                         (-9223372036854775808) -> sqrInteger1
                       };
                     Jp# dt -> case $wsqrBigNat dt of dt1 { BN# dt2 -> Jp# dt2 };
                     Jn# dt -> case $wsqrBigNat dt of dt1 { BN# dt2 -> Jp# dt2 }
                   }
    Iface expr = \ ds :: Integer ->
                 case ds of wild {
                   SI# ds1
                   -> case ds1 of ds2 {
                        DEFAULT
                        -> let {
                             nsign :: Int# = uncheckedIShiftRA# ds2 63
                           } in
                           case tagToEnum#
                                  @ Bool
                                  (<=# (-# (xorI# ds2 nsign) nsign) 3037000499) of wild1 {
                             False -> timesInt2Integer ds2 ds2 True -> SI# (*# ds2 ds2) }
                        (-9223372036854775808) -> sqrInteger1 }
                   Jp# dt -> case $wsqrBigNat dt of dt1 { BN# dt2 -> Jp# dt2 }
                   Jn# dt -> case $wsqrBigNat dt of dt1 { BN# dt2 -> Jp# dt2 } }

  Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug