Logic.fromstring: add single-level paren support and func attribute

Also, errors are raised if there are not spaces around
& and | or if there *is* a space after '!'. This inflexibility
enforces readability on the input strings.

For sake of simplicity it's probably best not to support more than one level of parentheses?