LibMathSigned - wpowi returns an invalid result for a negative exponent  Pending
`LibMathSigned.wpowi(x,n)` calculates Wad value `x` (base) to the power of `n` (exponent). The exponent is declared as a signed int, however, the method returns wrong results when calculating `x ^(-n)`.\\nThe comment for the `wpowi` method suggests that `n` is a normal integer instead of a Wad-denominated value. This, however, is not being enforced.\\n`LibMathSigned.wpowi(8000000000000000000, 2) = 64000000000000000000`\\n(wrong) `LibMathSigned.wpowi(8000000000000000000, -2) = 64000000000000000000`\\n```\\n// x ^ n\\n// NOTE: n is a normal integer, do not shift 18 decimals\\n// solium-disable-next-line security/no-assign-params\\nfunction wpowi(int256 x, int256 n) internal pure returns (int256 z) {\\n    z = n % 2 != 0 ? x : \\_WAD;\\n\\n    for (n /= 2; n != 0; n /= 2) {\\n        x = wmul(x, x);\\n\\n        if (n % 2 != 0) {\\n            z = wmul(z, x);\\n        }\\n    }\\n}\\n```\\n
Make `wpowi` support negative exponents or use the proper type for `n` (uint) and reject negative values.\\nEnforce that the exponent bounds are within sane ranges and less than a Wad to detect potential misuse where someone accidentally provides a Wad value as `n`.\\nAdd positive and negative unit-tests to fully cover this functionality.
```\\n// x ^ n\\n// NOTE: n is a normal integer, do not shift 18 decimals\\n// solium-disable-next-line security/no-assign-params\\nfunction wpowi(int256 x, int256 n) internal pure returns (int256 z) {\\n    z = n % 2 != 0 ? x : \\_WAD;\\n\\n    for (n /= 2; n != 0; n /= 2) {\\n        x = wmul(x, x);\\n\\n        if (n % 2 != 0) {\\n            z = wmul(z, x);\\n        }\\n    }\\n}\\n```\\n