Add support for user functions

https://code.google.com/p/speedcrunch/issues/detail?id=38

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
  - name of the function is not already used by a variable (a similar check
    is made when creating new variable).
  - name of each arguments is unique for that function.
  - 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 updated in real time:
  a = 1
  b = 3 * a
  a = 2
Now, 'a' is 2, but 'b' is still 3, which is different from "3 * a".
  a = 1
  b() = 3 * a
  a = 2
Now, 'a' is 2, and 'b()' returns 6, which is equal to "3 * a".

Add user functions persistence between sessions (configurable).
Add user functions load/save through SCH files.
Bump the SCH version number to "0.12".
Add a dockable widget to manage user functions (based on Variables widget).
Raise the state label as it does not show otherwise on Ubuntu.
Add user functions support to auto-completion.
Show user functions signatures when the user is using it (like built-ins).