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
super(Monetary, self)._setup_regular_full(model)
        assert self.currency_field in model._fields, \
            "Field %s with unknown currency_field %r" % (self, self.currency_field)
    def convert_to_cache(self, value, record, validate=True):
        if validate:
            currency = record[self.currency_field]
            
            
            if currency:
                value = currency.round(float(value or 0.0))
                return float_precision(value, currency.decimal_places)
        return float(value or 0.0)
class _String(Field):
    """ Abstract class for string fields. """
    _slots = {
        'translate': False,             
    }
    _column_translate = property(attrgetter('translate'))
    _related_translate = property(attrgetter('translate'))
    def _description_translate(self, env):
        return bool(self.translate)
    def get_trans_terms(self, value):
        """ Return the sequence of terms to translate found in `value`. """
        if not callable(self.translate):
            return [value] if value else []
        terms = []
        self.translate(terms.append, value)
        return terms
    def get_trans_func(self, records):