Allow payment_checkout() to return HTML.

Before we assumed that payment methods would either redirect or return an error during payment_checkout(),
but turns out some payment providers need an extra step to show some HTML to the user during checkout.

Props @nb