Prevent RGG from generating NaN values.

This CL introduces "ValueProperty" to RGG, which defines the required
properties of input values as well as the guaranteed properties of the
output values. During the graph generation process, an operation
input may only be wired to an operation output with compatible
properties.

E.g., the input of SQRT will not come from CONV_2D because
CONV_2D cannot guarantee non-negative output values; while it could come
from RELU because RELU guarantees that the output values are always
non-negative.

Additionally, fixes the issue that REDUCE_PROD may generate NaN values
because 0 * inf evaluates to NaN in C++.

Bug: 145188288
Bug: 150805665
Test: NNT_static_fuzzing
Change-Id: I5464233839a91afbe2022b8fe603e4296825a7a4
Merged-In: I5464233839a91afbe2022b8fe603e4296825a7a4
(cherry picked from commit 31e6cdba07f34f717631de4d8a568e4d33205cac)
9 files changed