Logic

This modifies fromstring to raise errors on bad input and to allow one level of parentheses handling. You are the most likely person to use this so I am just sending it as a PR to you, removing the request of it as a separate PR.
If there's no nesting shouldn't it be `if text.count('(') != text.count(')') != 1`?