Instead of one catchall trait for contexts, there are now several:
* `Context` is now a "use-only" context, allowing only to retrieve variable names and call functions.
* `ContextWithMutableVariables` also allows to mutate variables.
* `ContextWithMutableFunctions` also allows to mutate functions. However this is not used anywhere at the moment. It will come in handy when the evalexpr language gets a function definition feature.
* `GetFunctionContext` also allows to retrieve functions as `Function` type. This is uncommented at the moment, as it does not have any use in the crate as of now, and likely also not with planned future features.
Additionally, this commit makes functions generic over the context type, as opposed to having a dynamic reference to a context type.
Relates to #73
Manage sequence operators, which currently are `Chain` and `Token` on the stack without ever inserting unfinished sequence operator nodes into another node.
Relates to #44
This commit implements an iterator over the identifiers in an expression.
The identifiers are iterated pre-order, meaning that higher nodes in the tree are emitted first.
The identifier iterator is based on a general iterator over all nodes in an operator tree, which can be used for further featues.
Relates to #37
* Rename `HashMapConfiguration` to `HashMapContext`
* Rename `EmptyConfiguration` to `EmptyContext`
* Implement `Context` for both predefined contexts
* Update tests and doctests
Relates to #22
* Rename `Node::eval` to `Node::eval_with_configuration`
+ Add `Node::eval` that calls `Node::eval_with_configuration` with an `EmptyConfiguration`
+ Improve documentation of `Node` and the changed methods
Implements #5
+ Add comma token
+ Add tuple operator
+ Add tuple value type
+ Implement display for `tree::Node` and all related types
+ Add support for right-to-left chaining of operators with same precedence
The priority of chaining of operators with the same precedence remains left-to-right.
Only if two consecutive operators with the same precedence are right-to-left, they will be ordered right-to-left.
Implements #4.