Fix numerical issues with BiCGSTAB.
To make more consistent with the literature, initialize alpha = 0
for the first iteration so that p0 = r
.
Modified the restart condition for r ⟂ r0
to check the angle,
dot(r/|r|, r0/|r0|) < eps
Added a second restart condition for checking r0 ⟂ v
, where
we randomly generate a new start r0
(Fixes #2856 (closed), #2899 (closed)).