Prevent computations in float16 in scalar and elemwise

Also add a bunch of tests
When the `impl` is called from the `perform` of a composite Op, x is sometimes a python int or float