Braintree Payment Gateway Integration

Work done is this PR

- Users can choose to make a payment recurring.
- User will get subscribe and his transaction will be made in case of recurring payment.
- Vault transaction is maded to prevent the user from giving credit-card details again and again.
- If user is subscribed and he changes his plan subscription get updated.
- Service for braintree to refactor the code and to prevent the fat models or controllers. 
- Ability to turn on/off recurring payments in the settings
- Changing card details
- Success / Failed payments should send an email to the user. Maybe this is something Braintree does? (this is done by braintree itself we needed to add DNS information there)

Note:
Specs will be added latter.

yes this is being used when user will visit the plan page and clicks checkout. User will be navigated to new transaction page. Thats the reason you have got `@user.credit_card.token` to nil, because your transaction never get created. No creditcard get created. When you checkout the plan and make transaction. You transaction get created with creditcard and then you can cancel the subscription.