Added support for the NMI Customer Vault

This was added as a separate class from NmiGateway since NmiGateway
is just an extension of the AuthorizeNetGateway, and that
compatibility layer does not support customer vault functionality.

Additionally, all of the NmiVaultGateway methods for processing
charges use customer vault id instead of a credit card number.
Adding separate methods for all of the customer vault endpoints
in NmiGateway would have resulted in two separate codebases mashed
together, and there would be methods like
NmiGateway::purchase_vault(). Instead we now have
NmiVaultGateway::purchase().
Added codes useful for determining if a transaction was declined, fraud or other when not successful
Added gateway for GMO-PG
Merge branch 'add_nmi_vault'
Merge branch 'gmo'