fix bug in config.py parsing where it doesn't accept negative values

In the rockage branch, I was trying to do this:

```
[[donation_tier]]
'SJSU Student discount' = -10
'No thanks' = 0
'Supporter Package' = SUPPORTER_LEVEL
```

(note: not necessarily that doing that above is a good idea, just something I was trying out)

This exposed a bug in the underlying config parsing since I guess we've never tried to parse a negative INI value in the history of ubersystem.

This was crashing on '-10' because the previous code was using str.isdigit() which returns false for -10.  That would instead try to resolve it like a variable name doing globals()['-10'] which threw a KeyError.

The fix is that instead of using isdigit() directly, we check for the presence of a +/- first and then do isdigit() after that.
Two things:

1) Python functions which return booleans usually begin with the word "is", so I would name this function something like ``_is_intstr``, but that's just a naming preference.

2) This function will raise an exception if s is the empty string, since you'll get an out of bounds error if ``s[0]`` doesn't exist.  It would be much more correct to simply return false in that case.  (Also, since strings are already iterable, you can do an ``in`` check on a string instead of a tuple of 1-length strings.)  So the if-statement should just read:

``if s and s[0] in '+-':``