Add preauth, void support; add Token API support

* Added preauth and void to Direct payment method
* Added Token payment method
* Refactored most of the code