Parenthesize selected expression

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

The feature is triggered with Control-P.
If no selection is present, the entire expression will be wrapped.
Add a bit field widget for visual binary number composition

https://code.google.com/p/speedcrunch/issues/detail?id=348
Few BitField fixes

- Add new sources to CMake.
- Improve bit tooltip, no translation required now.
- Fix copyright and add Sébastien Szymanski to credits in about box.
- Code clean up and style fix. Includes fixed headers for Qt5 compilation.
Add support for real numbers in all supported radices

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

Example: 0b10.01
Add tests for any-base fraccional input support
Fix wrong digit grouping after radix character

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

It did not work correctly with comma, only with dot.
Add right parens, place cursor on left when inserting or completing functions

https://code.google.com/p/speedcrunch/issues/detail?id=494
Use the same font on both the result display and the editor

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

This requires adjusting the height of the editor dynamically on font change.
Create and delete the BitField widget dynamically
Shift bitfield bits on up/down wheel events
Preview bitfield numbers in hexadecimal format in the editor, instead of binary
Fix editor resizing when changing font point size with Shift+Wheel

This is a follow-up to revision c0d535b where zooming works well only with
Shit+Arrows.
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) ?

Added user functions persistence between sessions (configurable).
Added user functions load/save through SCH files.
Bumped the SCH version number to "0.12".
Added a dockable widget to manage user functions (based on the Variables widget).
Raise the state label on top of the window as it does not show otherwise on Unbuntu.
Added user functions support to auto-completion.
Show user functions signatures when the user is using it (the same way as with built-in functions).
Fixed a bug where the ans built-in variable was changed into a user variable when loading an external session.
Update the user variables and functions docks after loading an external session if they are visible, as their content might have changed.
Allow NaN to be a valid result for some expressions (user function assignments only). In this case, no result is shown, and the ans variable keeps it value from the latest operation. An empty result string is used for sessions importing/exporting and settings loading/saving.
Proposed another way to save sessions history (check MainWindow::saveSession()) which eases the process and fixes a bug which happens when a user saves a session which contains floating point results and the result format is not decimal: when the user loads this session later, SpeedCrunch never uses the results format set by the user to show these results, as they are prefixed with a format specifier (0x, 0b, etc.) in the session file.
Sort the auto-completion list by the first column (identifier name) instead of the second (identifier description).
Added user functions dock source files to qmake file.
Added unit testings for user functions.