Simplify signature parsing

I've rewritten some of the signature parsing code to make it simpler and cleaner. The old parser was waaaay too lax in stupid places (for instance, allowing strings instead of Unix timestamps), and too strict in others (parsing timezone offsets). It also fixes the weird-ass behavior where a corrupted timezone would clean the actual time offset. Also, it handles names with angle brackets much more reliably.

/cc @arrbee @nulltoken