We need to allow off-site payment gateways to generate payment methods and make payments with them.

Currently, only gateways which implement OnsiteInterface may create payments with payment methods, as the createPayment method exists on OnsiteInterface. This method actually performs a payment with an attached payment method. This means it can be moved to SupportsStoredPaymentMethodsInterface since it requires a payment method for payment.

This solves one problem. However, SupportsStoredPaymentMethodsInterface enforces the implementation of createPaymentMethod. This enforces payment method creation from a tokenized payment instrument before processing a payment transaction. Off-site payment gateways may process the payment transaction when returning to the checkout page or through their IPN/Webhook endpoint.

Here is a shuffling of the existing interfaces to make it feasible for an off-site payment gateway to generate payment method entities during onReturn or onNotify.