**Impacted versions:**
saas-14

**Steps to reproduce:**
1. create a sale order with a new product named Sprint configured as service, Track Service "Create task and create hours" and link to Internal - GAP Analysis.
2. Confirm the sale order and review
3. Add a new line for sprint in the sale order and try to save the file.

**Current behavior:**
A Odoo Server Error (Validation Error) appears "Error, a partner cannot follow twice the same object"

![image](https://cloud.githubusercontent.com/assets/7593953/23186396/9f050718-f84c-11e6-95c0-af0104c9cdc9.png)

**Expected behavior:**
I want to be able to add more lines to my confirmed sale order

**Video/Screenshot link (optional):**
https://youtu.be/ApXlPrxVISE

I think this is a critical bug. We found out this bug Feb 12, so maybe a change before that date could introduce the bug. 

If if help, I repeat the same poc in a local instance and this is the error capture in my server log
```bash
sale.order(1,).write({
    u'order_line': [[4, 1, False], [0, False, {
        u'procurement_ids': [],
        u'qty_delivered': 0,
        u'product_id': 1,
        u'product_uom': 1,
        u'sequence': 11,
        u'customer_lead': 0,
        u'price_unit': 0,
        u'product_uom_qty': 1,
        u'discount': 0,
        u'state': u'draft',
        u'qty_delivered_updateable': True,
        u'analytic_tag_ids': [],
        u'invoice_status': u'no',
        u'tax_id': [[6, False, [2]]],
        u'layout_category_id': False,
        u'name': u'Sprint'}]]})

2017-02-20 20:05:09,736 1513 INFO openerp_test odoo.sql_db: bad query:
UPDATE "mail_followers"
SET "res_model"='project.task'
WHERE id IN (29, 30) 

ERROR: duplicate key value violates unique constraint "mail_followers_mail_followers_res_partner_res_model_id_uniq"
DETAIL:  Key (res_model, res_id, partner_id)=(project.task, 16, 3) already exists.
```

addons/mail/models/mail_followers.py
generic.append([0, 0, {'res_model_id': res_model_id, 'channel_id': cid, 'subtype_ids': [(6, 0, channel_data.get(cid) or default_subtypes.ids)]}])
        
        if not force_mode:
            for res_id in res_ids:
                command = []
                doc_followers = existing.get(res_id, list())
                new_pids = set(partner_data.keys()) - set([sub.partner_id.id for sub in doc_followers if sub.partner_id]) - set(gen_new_pids)
                new_cids = set(channel_data.keys()) - set([sub.channel_id.id for sub in doc_followers if sub.channel_id]) - set(gen_new_cids)
                
                for new_pid in new_pids:
                    command.append((0, 0, {
                        'res_model_id': res_model_id,
                        'partner_id': new_pid,
                        'subtype_ids': [(6, 0, partner_data.get(new_pid) or default_subtypes.ids)],
                    }))
                for new_cid in new_cids:
                    command.append((0, 0, {
                        'res_model_id': res_model_id,
                        'channel_id': new_cid,
                        'subtype_ids': [(6, 0, channel_data.get(new_cid) or default_subtypes.ids)],
                    }))
                if command:
                    specific[res_id] = command
        return generic, specific
    #
    
    
    #
    @api.multi
    def _invalidate_documents(self):