Add support for decimal numbers [funcparserlib]

Now a number is composed of a series of digits, potentially followed by
a decimal point and another series of digits. The decimal_part parser
uses the `maybe` combinator to return either a list of matched
characters or None, which is coerced to an empty string inside `cat`.
The `number` parser combines digits and decimal part, then casts their
result as a float.

The `finished` parser matches end-of-line, forcing the final parser to
consume the full input.
Add support for negative numbers [funcparserlib]

It would be nice in this case if str(None) returned "", but it doesn't,
so I used a small function to turn Nones into strings, then delegated to
it when possible. Other than that, there isn't a lot to see here:
another maybe added to the `number` parser.
Support for adding two numbers [funcparserlib]

The `skip` combinator forces its supplied parser to match, but doesn't
append the matched string to the list of results. This is perfect for
our needs: we just pass the numeric parts of the expression to the
built-in `sum` function, which takes a list of numbers and adds them
all together.