refactor accounts elsewhere

Currently we have four accounts elsewhere, three useful for authentication (Bitbucket, GitHub, Twitter) and one that can be connected but not used for authentication (Bountysource). These are implemented in a very WET way and we need to DRY it up. This is an old pull request from @LyndsySimon that I brought over from his fork into a branch on the main repo so we can bring more hands on deck.

 - [x] review OO model
 - [ ] review simplates
 - [ ] review CSRF/security

#### Bitbucket

 - [x] sign in
 - [x] connect to existing
 - [x] reconnect (merge) to existing
 - [x] view elsewhere
 - [x] pledge
 - [x] lock - success
 - [x] lock - failure
 - [x] unlock - success
 - [x] unlock - failure
 - [x] view group elsewhere
 - [ ] ~~pledge via group elsewhere~~  (*Note from Changaco:* this is not currently implemented)

#### Bountysource

 - [x] connect to existing
 - [x] reconnect (merge) to existing

#### GitHub

 - [x] sign in
 - [x] connect to existing
 - [x] reconnect (merge) to existing
 - [x] view elsewhere
 - [x] pledge
 - [x] lock - success
 - [x] lock - failure
 - [x] unlock - success
 - [x] unlock - failure
 - [x] view group elsewhere
 - [ ] ~~pledge via group elsewhere~~  (*Note from Changaco:* this is not currently implemented)

#### OpenStreetMap

 - [x] sign in
 - [x] connect to existing
 - [x] reconnect (merge) to existing

*Edit by Changaco:* the following aren't possible for this plaftorm, see https://github.com/gittip/www.gittip.com/pull/1369#commitcomment-5361025
 - [ ] ~~view elsewhere~~
 - [ ] ~~pledge~~
 - [ ] ~~lock - success~~
 - [ ] ~~lock - failure~~
 - [ ] ~~unlock - success~~
 - [ ] ~~unlock - failure~~

#### Twitter

 - [x] sign in
 - [x] connect to existing
 - [x] reconnect (merge) to existing
 - [x] view elsewhere
 - [x] pledge
 - [x] lock - success
 - [x] lock - failure
 - [x] unlock - success
 - [x] unlock - failure

#### Venmo

 - [x] connect to existing
 - [x] reconnect (merge) to existing

<!---
@huboard:{"order":247.84375}
-->