docstr: add a block of image with table (table on the left, image on the right)
  
  Args:
      header (list(str)):  table header
      data: list(list(string)), 2D nested list with table content
      src (str): image path
      alt (str): image attribute
      width (int): width of image
      height (int): height of image
  Returns: HTML String
code: def add_table_image_group(
      header: list,
      data: list,
      src: str,
      alt: str,
      *,
      width=None,
      height=None,
  ):
      """
      add a block of image with table (table on the left, image on the right)
  
      Args:
          header (list(str)):  table header
          data: list(list(string)), 2D nested list with table content
          src (str): image path
          alt (str): image attribute
          width (int): width of image
          height (int): height of image
      Returns: HTML String
      """
      doc = Doc()
      with doc.tag("div"):
          doc.asis(CustomHtml.add_table(header=header, data=data))
          doc.asis(
              CustomHtml.add_image(
                  src=src, alt=alt, width=width, height=height
              )
          )
      return doc.getvalue()
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import os
  import datetime
  from yattag import Doc, indent
label_desc: Use image node_id 21 for calling the CustomHtml obj's underlying member method code with example usage: obj.add_table_image_group(header, data, src, alt) and returns: doc