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

openerp/fields.py
""" Encapsulates a value in the cache in place of a normal value. """
    def __init__(self, value):
        self.value = value
    def get(self):
        return self.value
class FailedValue(SpecialValue):
    """ Special value that encapsulates an exception instead of a value. """
    def __init__(self, exception):
        self.exception = exception
    def get(self):
        raise self.exception
def _check_value(value):
    """ Return ``value``, or call its getter if ``value`` is a :class:`SpecialValue`. """
    return value.get() if isinstance(value, SpecialValue) else value
def copy_cache(records, env):
    """ Recursively copy the cache of ``records`` to the environment ``env``. """
    todo, done = set(records), set()
    while todo:
        record = todo.pop()
        if record not in done:
            done.add(record)
            target = record.with_env(env)
            for name in record._cache:
                field = record._fields[name]
                value = record[name]
                if isinstance(value, BaseModel):
                    todo.update(value)
                target._cache[name] = field.convert_to_cache(value, target, validate=False)
def resolve_mro(model, name, predicate):