Avoid creating two BoostBigInt when only one is possible.

* std::make_shared() will call the constructor,
  so pass a suitable argument for BoostBigInt constructors.
Make BoostBigInt::make_shared_ptr generic in its argument.