Re-arrange if/elsif checking

So that we check for it before eating the first '(' character.
This is in preparation for allowing pre-compiled conditions.
Move and expose list of allowed attribute names

And allow '/' in attribute names.  Mainly for WiMAX insanity
Be more pedantic about conditional checks

Using a similar approach to the xlat code.
Parse the conditions, and complain descriptively on error