This commit adds support for user functions.

The following syntax is used for user function assignment:
  fname(arg1;arg2;..) = expression
For example:
  test(a;b) = ceil(a * b - 10)

The name of the user function and its arguments are checked so that:
  - the name of the function is not the name of a built-in function or constant.
  - the name of the function is not already used by a variable (a similar check is made when creating new variable).
  - the name of each arguments is unique for that function.
  - the name of each arguments is not the name of a built-in function or constant.

When an argument has the same name as a variable, identifiers with that name in the user function expression refer to the argument. It is up to the user to choose arguments names that don't collide with variables that the user functions need.

When assigning a user function, its expression is (pre-)compiled, and the resulting opcodes and lists are stored, and will be used later when the function is called. In order to check for errors (syntax and semantic), a partial execution of the function expression is done too. As some identifiers have an undefined value at setting time (i.e., arguments, and variables or user functions not defined yet), the result of that execution is often NaN. Thus, the NaN result is allowed during the evaluation of user function assignments.

User function recursion is not allowed, as there's no way to stop the recursion with the current SpeedCrunch operators/functions. However, references to other user functions are allowed in user function expressions.

User functions with no arguments are allowed (e.g., "test() = 12"). This kind of functions act as variables, except their value is update in real time. For instance:
  a = 1
  b = 3 * a
  a = 2
Now, 'a' is equal to 2, but 'b' is still equal to 3, which is different from "3 * a".
  a = 1
  b() = 3 * a
  a = 2
Now, 'a' is equal to 2, and 'b()' returns 6, which is equal to "3 * a".

Maybe variables should be replaced by user functions (with no arguments) ?

Methods for importing/exporting user functions are ready (when the app starts/stops), but not used yet.

Some unit tests should probably be written for user functions ...