Typically called by the explore()/recurse() methods and of form:

                f(pathInTree, **kwargs)

            and returns dictionary of which one element is

                'status':   True|False

            recursion continuation flag is returned:

                'continue': True|False

            to signal calling parent whether or not to continue with tree
            transversal.

            Save the node specified by a path in the data tree to disk.

            Given a "root" on the disk storage, create the path relative
            to that root, and in that location, save the contents of the internal
            node's d_data at that tree path location.

            :param kwargs:
            :return:

def node_save(self, astr_pathInTree, **kwargs):
            """
            Typically called by the explore()/recurse() methods and of form:

                f(pathInTree, **kwargs)

            and returns dictionary of which one element is

                'status':   True|False

            recursion continuation flag is returned:

                'continue': True|False

            to signal calling parent whether or not to continue with tree
            transversal.

            Save the node specified by a path in the data tree to disk.

            Given a "root" on the disk storage, create the path relative
            to that root, and in that location, save the contents of the internal
            node's d_data at that tree path location.

            :param kwargs:
            :return:
            """
            str_pathDiskRoot    = '/tmp'
            str_pathDiskOrig    = os.getcwd()
            srt_pathDiskFull    = ''
            str_pathTree        = ''
            str_pathTreeOrig    = self.pwd()
            b_failOnDirExist    = True
            b_saveJSON          = True
            b_savePickle        = False
            for key, val in kwargs.items():
                if key == 'startPath':      str_pathTree        = val
                if key == 'pathDiskRoot':   str_pathDiskRoot    = val
                if key == 'failOnDirExist': b_failOnDirExist    = val
                if key == 'saveJSON':       b_saveJSON          = val
                if key == 'savePickle':     b_savePickle        = val

            str_pathDiskFull    = str_pathDiskRoot + str_pathTree
            # print('\n')
            # print('In self.node_save():')
            # print('memTree:  %s' % (str_pathTree))
            # print('diskRoot: %s' % str_pathDiskRoot)
            # print('distPath: %s' % str_pathDiskFull)
            # print(kwargs.keys())
            # print(kwargs.values())
            # print('\n')

            if len(str_pathDiskRoot):
                if not os.path.isdir(str_pathDiskRoot):
                    # print('Processing path: %s' % str_pathDiskRoot)
                    try:
                        # print('mkdir %s' % str_pathDiskRoot)
                        os.makedirs(str_pathDiskRoot)
                    except OSError as exception:
                        return {'status' :      False,
                                'continue':     False,
                                'message':      'unable to create pathDiskRoot: %s' % str_pathDiskRoot,
                                'exception':    exception}
                # print('cd to %s' % str_pathDiskRoot)
                os.chdir(str_pathDiskRoot)
                if self.cd(str_pathTree)['status']:
                    if str_pathTree != '/':
                        # print('mkdir %s' % str_pathDiskFull)
                        try:
                            os.makedirs(str_pathDiskFull)
                        except OSError as exception:
                            if b_failOnDirExist:
                                return {'status' :      False,
                                        'continue':     False,
                                        'message':      'unable to create pathDiskRoot: %s' % str_pathDiskRoot,
                                        'exception':    exception}

                    os.chdir(str_pathDiskFull)
                    for str_filename, contents in self.snode_current.d_data.items():
                        # print("str_filename = %s; contents = %s" % (str_filename, contents))
                        if b_saveJSON:
                            with open(str_filename, 'w')    as f: json.dump(contents,     f)
                            f.close()
                        if b_savePickle:
                            with open(str_filename, 'wb')   as f: json.dump(contents,     f)
                            f.close()
                else:
                    return{'status':    False,
                           'continue':  False,
                           'message':   'pathTree invalid'}
                self.cd(str_pathTreeOrig)
                os.chdir(str_pathDiskOrig)
                return {'status':   True,
                        'continue': True}
            return {'status':   False,
                    'continue': False,
                    'message':  'pathDisk not specified'}