add convexity logic and tests for scalar max, Inf, and NaN

PathOps relies on isConvex() only returning true for trivially
convex paths. The old logic also returns true if the paths that
contain NaNs and Infinities. Return kUnknown_Convexity instead
in those cases and in cases where the convexity logic computes
intermediaries that overflow.

Review URL: https://codereview.chromium.org/784593002
make SkColorShader private, use public factory

BUG=skia:

Need https://codereview.chromium.org/785823002/ to land first

Review URL: https://codereview.chromium.org/788533002