Evaluate expressions supplied to SNat macros

Relaxes constraint of requiring Constant nodes. Allows crazy things:

    val x:SInt({(a:Int,b:Int,c:Int)=>a*a+b*b+c*c}.apply(3,4,5)) = 50