[ADD] added rating, rating_project and rating_project_issue module

 - Task : https://www.odoo.com/web#id=8060&view_type=form&model=project.task
 - Pad : https://pad.odoo.com/p/r.2BmKqyvcwKbiXPRI

[IMP] Added option to install rating module under Project

[IMP] added template to display when customer rates the task/issue

[IMP] Improved template and code

[IMP] : rating , rating_project and rating_project_issue as per new api

[IMP]: rating template

[FIX] : test case failed

[IMP] : code
Add the generic computation method to calculate the repartition per value, or per grade : 

    @api.multi
    def rating_get_repartition_per_value(self, res_ids=None, res_model=None):
        """ get the repatition of rating grade for the given res_ids.
            :param list res_ids : optional list of ids. If not given, this will take the ids of the current recordset.
            :param string res_model : optional name of model. If not given, the one of the current recordset will be used.
            :return dictionnary where the key is the rating value (the note), and the value, the number of object (res_model, res_id) having the value
        """
        if res_model is None:
            res_model = self._name
        if res_ids is None:
            res_ids = self.ids
        data = self.env['rating.rating'].read_group([('res_model', '=', res_model), ('res_id', 'in', res_ids), ('state', '>=', 0)], ['state'], ['state', 'res_id'])
        # init dict with all posible rate value, except -1 (no value for the rating)
        res = {}
        for value in range(0, 11):
            res[value] = 0

        for d in data:
            res[d['state']] = d['state_count']
        return res

    @api.multi
    def rating_get_repartition_per_grade(self, res_ids=None, res_model=None):
        """ get the repatition of rating grade for the given res_ids.
            :param list res_ids : optional list of ids. If not given, this will take the ids of the current recordset.
            :param string res_model : optional name of model. If not given, the one of the current recordset will be used.
            :return dictionnary where the key is the grade (great, okay, bad), and the value, the number of object (res_model, res_id) having the grade
                    the grade are compute as    0-30% : Bad
                                                31-69%: Okay
                                                70-100%: Great
        """
        if res_model is None:
            res_model = self._name
        if res_ids is None:
            res_ids = self.ids
        data = self.rating_get_repartition_per_value(res_ids, res_model)
        res = {
            'great' : 0,
            'okay' : 0,
            'bad' : 0
        }
        for key in data:
            if 0 <= key and key <= 3:
                res['bad'] = res['bad'] + data[key]
            if 3 < key and key < 7:
                res['okay'] = res['okay'] + data[key]
            if 7 <= key and key <= 10:
                res['great'] = res['great'] + data[key]
        return res