new Formatter.General(-1) throws exception

Most formatters would fail when given strange precision because `Number.toFixed` throws an error. But `Formatter.General` doesn't use `toFixed`, so it failed silently.

Now all formatters throw an exception on construction if their precision is strange.

Close #568.