Fix std.math.frexp for real == double targets

I found this problem when testing std.math on ARM where real is the same type as double. The unit test in line 2109 fails on ARM. It also fails on x86 if ```real``` is replaced by ```double``` in frexp. See http://dpaste.dzfl.pl/72725240 for a test case reduced from that unit test.

The problem is in line 2087:
```d
 exp = ((ex - F.EXPBIAS)>> 4) - real.mant_dig + 1;
```
If ex is unsigned, then ```ex-F.EXPBIAS``` underflows and gives wrong results. Changed ex from ```uint``` to ```int ``` to fix this.

ping @donc : is this the correct fix?