std::bigint: improve performance

This commit reduces extra memory allocation in std::bigint.

In my simple benchmark test, time of computing `1000!` becomes ~1000x faster.
- [first benchmark result](https://gist.github.com/4360131/e4aa57c7f87977821e6e4f6fa97d14aee353cd24)
- [improved version's benchmark result](https://gist.github.com/4360131/a90df347cbbda82d0257a94f42b6eadffd3302db#file-benchmark-result-txt)

There still may be some points to be improved in performance. For example, switching the algorithms depending on the length of the array.