This change fixes a bug where `100test` would be parsed as a number, and the parser would subsequently fail. Now the value is only parsed as a number if it is immediately followed by an allowed character - otherwise it will fail, and the value `100test` will be parsed as an ident instead.
Previously the expression operations happened right-to-left so `1 - 2 - 3 - 4 - 5` was actually calculated as `(1 - (2 - (3 - (4 - (5)))))`. Now the expressions are calculated according to BODMAS, with boolean expressions calculated last.
Due to a bug in msgpack-rust (https://github.com/3Hren/msgpack-rust/issues/86), in order to have correct serialization<->deserialization of data, we need to ensure all fields are serialized even when empty. This will affect the output size of the data, but will ensure that once serialized, the data is deserialized without issue.
Instead of creating a new Vec<_> for every embedded path part, we now use a reference when calling get/set/del on a value’s data. This means we aren’t creating and copying the Vec items each and every time we traverse down a path.