**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.
```

if force_mode:
            followers.unlink()
        else:
            for follower in followers:
                existing.setdefault(follower.res_id, list()).append(follower)
                if follower.partner_id:
                    p_exist.setdefault(follower.partner_id.id, list()).append(follower.res_id)
                if follower.channel_id:
                    c_exist.setdefault(follower.channel_id.id, list()).append(follower.res_id)
        default_subtypes = self.env['mail.message.subtype'].search([
            ('default', '=', True),
            '|', ('res_model', '=', res_model), ('res_model', '=', False)])
        external_default_subtypes = default_subtypes.filtered(lambda subtype: not subtype.internal)
        if force_mode:
            employee_pids = self.env['res.users'].sudo().search([('partner_id', 'in', partner_data.keys()), ('share', '=', False)]).mapped('partner_id').ids
            for pid, data in partner_data.iteritems():
                if not data:
                    if pid not in employee_pids:
                        partner_data[pid] = external_default_subtypes.ids
                    else:
                        partner_data[pid] = default_subtypes.ids
            for cid, data in channel_data.iteritems():
                if not data:
                    channel_data[cid] = default_subtypes.ids
        
        gen_new_pids = [pid for pid in partner_data.keys() if pid not in p_exist]
        gen_new_cids = [cid for cid in channel_data.keys() if cid not in c_exist]
        for pid in gen_new_pids:
            generic.append([0, 0, {'res_model_id': res_model_id, 'partner_id': pid, 'subtype_ids': [(6, 0, partner_data.get(pid) or default_subtypes.ids)]}])
        for cid in gen_new_cids: