Shouldn't GraDual{T} be comparable to T so that `isless(graDual, x) == isless(graDual.v, x)`? Otherwise it's not possible to differentiate `x > 0 ? x : -x`