Impacted versions:10

Steps to reproduce:
Following the code in https://www.odoo.com/documentation/10.0/api_integration.html both in a fresh install and against 'https://demo.odoo.com/start' trows a type error

Current behavior:
Now I get an error when executing:

```
ids = models.execute_kw(db, uid, password,  'res.partner', 'search',
    [[['is_company', '=', True], ['customer', '=', True]]],
    {'limit': 1})
[record] = models.execute_kw(db, uid, password,
    'res.partner', 'read', [ids])
# count the number of fields fetched by default
len(record)
```

In particular it seems to be a type error (cannot marshal class odoo.tools.float_utils.float_precision)

Expected behavior:
I would expect it to behave as in the documentation

for attr, prop in self.related_attrs:
            if not getattr(self, attr):
                setattr(self, attr, getattr(field, prop))
        for attr, value in field._attrs.iteritems():
            if attr not in self._attrs:
                setattr(self, attr, value)
        
        if not self.states and self.inherited:
            self.states = field.states
        
        if self.inherited and field.required:
            self.required = True
    def traverse_related(self, record):
        """ Traverse the fields of the related field `self` except for the last
        one, and return it as a pair `(last_record, last_field)`. """
        for name in self.related[:-1]:
            record = record[name][:1]
        return record, self.related_field
    def _compute_related(self, records):
        """ Compute the related field ``self`` on ``records``. """
        
        others = records.sudo() if self.related_sudo else records
        for record, other in zip(records, others):
            if not record.id and record.env != other.env:
                
                copy_cache(record, other.env)
            other, field = self.traverse_related(other)
            record[self.name] = other[field.name]
    def _inverse_related(self, records):