Be sure that C_a/C_x can be undone properly

That means that:
1- we must remember the right position to undo only when it will succeed
2- call fixOperationCommands when it succeeds
3- call cancelOperationCommands when it fails.

Add undo tests, in particular I found several mistakes, and I added a
quite hard test, which tests for various bugs that the previous
implementation had:
- 0x0 <C-x> <C-a> resulted into 0x8000000000000000 because of signedness
  issues
- "0x0 123" <C-x><C-a> resulted into "0xffffffffffffffff 124" after the
  previous bug fixed because we always want to go to the first digit which
  is bogus if we can read a number where we are.