Remove depth from JsonPrinterOption

and add it to the functions instead.
Remove the user handle since the callback is now a std::function

which can a function of an object
First implementation of the print function