ClassUtils: avoid overflow when injecting params

When Context.inject(Object) is called to inject parameters, it uses
ClassUtils.setValue, which calls the deprecated ConversionUtils.convert,
which leans on the statically linked ConvertService, which needs to
lazily load its Converter singleton plugins, which needs to inject those
singleton plugins with a context, which calls Context.inject(Object)...

To avoid this loop, this commit makes ClassUtils.setValue only call the
ConversionUtils.convert method as needed, rather than always. And in the
case of parameter injection, the types will always be compatible and
hence conversion will never be needed.

The cross-dependency between ClassUtils and ConversionUtils was always
suboptimal and now it finally bit us. In the near future, we will need
to deprecate ClassUtils.setValue in favor of a setFieldValue method of
the ConvertService.