printers CHANGE rewrite printers mechanism

Instead of specifying output type (memory, stream, file descriptor, ...)
with each printer function call, use printer handler mechanism. The
handler is first created with specifying the output type with necessary
parameters. Then, the handler can be used in the single print function
without the need to specify the specific output type parameters. There
are also a helper functions to update/change the output type parameter
without a need to recreate the printer handler.

This change is necessary due to the increasing complexity of the
printer functions. We want to add another parameters/specific functions,
for example to print a separate node, but together with the specific
output type parameters, the function parameters list would be quite
complex.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1bab1e9..217257b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -213,6 +213,7 @@
     src/tree_data_hash.c
     src/parser_xml.c
     src/parser_json.c
+    src/printer.c
     src/printer_data.c
     src/printer_xml.c
     src/printer_json.c
@@ -249,6 +250,7 @@
     src/context.h
     src/tree.h
     src/tree_data.h
+    src/printer.h
     src/printer_data.h
     src/tree_schema.h
     src/printer_schema.h