This avoids creating a table every time the state property of a device
is accessed, adds proper support for getting/setting floating/point
state entries from Lua, calls the state entry's formatting method to
convert to a string (for flags fields, etc.) and exposes more
properties.
This is a breaking change as the exposed properties on state entries
have changed, and the value property has different semantics for
floating-point state entries.