Factor out parsing of atomic terms, in anticipation of simpler 'caseBool' syntax.
Factor out parsing of atomic terms, in anticipation of simpler 'caseBool' syntax.

The current 'caseBool' syntax is

  caseBool (x in m) b then t else f

but a more standard, eliminator style syntax would be

  caseBool (\ x -> m) t f b

The latter was not used because we were parsing 't', 'f', and 'b', as
syntax, which meant that

  caseBool (\ x -> m) t f b

would parse as

  caseBool ((\ x -> m) t f b)

i.e. the spaces would be interpreted as application.

However, there is a simple solution: just require the arguments to
'caseBool' to be atomic.  This commit factors out the atomic
expressions into a separate parser.

spire/spire