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

type = 'reference'
    _slots = {
        'size': None,                   
    }
    _related_size = property(attrgetter('size'))
    _column_size = property(attrgetter('size'))
    def _setup_regular_base(self, model):
        super(Reference, self)._setup_regular_base(model)
        assert isinstance(self.size, (NoneType, int)), \
            "Reference field %s with non-integer size %r" % (self, self.size)
    def convert_to_cache(self, value, record, validate=True):
        
        def process(res_model, res_id):
            record._prefetch[res_model].add(res_id)
            return (res_model, res_id)
        if isinstance(value, BaseModel):
            if not validate or (value._name in self.get_values(record.env) and len(value) <= 1):
                return process(value._name, value.id) if value else False
        elif isinstance(value, basestring):
            res_model, res_id = value.split(',')
            return process(res_model, int(res_id))
        elif not value:
            return False
        raise ValueError("Wrong value for %s: %r" % (self, value))
    def convert_to_record(self, value, record):
        return value and record.env[value[0]].browse([value[1]], record._prefetch)
    def convert_to_read(self, value, record, use_name_get=True):