Do not create an array when computing a scalar division
Make sure scalar ops do not compute in float16

Ops that are defined with upcast_to_float should upcast to
float32 or float64 minimally.

Add tests for the cases where the inputs were int8, which is when
float16 values appeared.
Do not try to generate C code for complex inverse
In elemwise.perform, make sure numpy ufuncs do not compute in float16

Since many elemwise ops do not call the scalar op's impl() method,
we needed to also change the perform method when numpy built-in
ufuncs are used.
Add helper functions for specifying the "expected" values

Otherwise, the expected values could be computed in float16,
which would not be precise enough, and which would not be supported
as a dtype by Theano.
Add int8 values in elemwise tests.

Also:
- add tests for "inv" op
- do not test inplace if the input is int and the output is float
- remove a couple of redundant dicts
Fix inplace tests for division
Fix output dtype of Ops in tensor.nnet
Update tests in tensor.nnet
Add explanatory comment, remove commented-out code
Update comment
Remove stale code for reusing output buffer in elemwise perform
Merge pull request #2228 from lamblin/fix_float16

Prevent computations in float16 in scalar and elemwise