Reverted the use of enforce in place of preconditions on the constructor

The reason for the change is performance. The method using enforce has the
following timing signature.

    Average initialization duration of Pi to 10 digits using std.BigInt = 1508.55 ns
    Average initialization duration of Pi to 10 digits using phi.Integer = 1969.94 ns
    Average initialization duration of Pi to 50 digits using std.BigInt = 2929.03 ns
    Average initialization duration of Pi to 50 digits using phi.Integer = 2859.22 ns
    Average initialization duration of Pi to 100 digits using std.BigInt = 4341.54 ns
    Average initialization duration of Pi to 100 digits using phi.Integer = 4397.74 ns
    Average initialization duration of Pi to 1000 digits using std.BigInt = 70000.5 ns
    Average initialization duration of Pi to 1000 digits using phi.Integer = 37022.8 ns

Here is after removing enforce.

    Average initialization duration of Pi to 10 digits using std.BigInt = 1626.86 ns
    Average initialization duration of Pi to 10 digits using phi.Integer = 1291.52 ns
    Average initialization duration of Pi to 50 digits using std.BigInt = 3219.71 ns
    Average initialization duration of Pi to 50 digits using phi.Integer = 1411.57 ns
    Average initialization duration of Pi to 100 digits using std.BigInt = 5117.83 ns
    Average initialization duration of Pi to 100 digits using phi.Integer = 1571.07 ns
    Average initialization duration of Pi to 1000 digits using std.BigInt = 78456.5 ns
    Average initialization duration of Pi to 1000 digits using phi.Integer = 7126.39 ns

It seems proper to use enforce, at least according to theory as
contracts are for validating the logic of the application and not
for scrubbing user input. Unfortunately, here in practice, there
does not seem to be a clean way to apply the theory without taking
a serious performance penalty.