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.

does result (braintree) tell us what went wrong?
like, how would i debug user reports regarding failed payments