:param kls - string of fully identified starter function or starter method path
     for instance:
     - workers.abstract_worker.AbstractWorker.start
     - workers.example_script_worker.main
    :return tuple (type, object, starter)
     for instance:
     - (FunctionType, <function_main>, None)
     - (type, <Class_...>, 'start')

def get_class(kls):
    """
    :param kls - string of fully identified starter function or starter method path
     for instance:
     - workers.abstract_worker.AbstractWorker.start
     - workers.example_script_worker.main
    :return tuple (type, object, starter)
     for instance:
     - (FunctionType, <function_main>, None)
     - (type, <Class_...>, 'start')
    """
    parts = kls.split('.')
    try:
        # First, try to import module hosting starter function
        module = '.'.join(parts[:-1])
        m = __import__(module)
    except ImportError:
        # Alternatively, try to import module hosting Class with a starter method
        module = '.'.join(parts[:-2])
        m = __import__(module)

    t = None
    starter = None
    for i in range(1, len(parts)):
        comp = parts[i]
        starter = parts[i:]
        m = getattr(m, comp)

        if isinstance(m, class_types):
            t = type
            starter = None if len(parts[i:]) == 1 else '.'.join(parts[i + 1:])
            break
        if isinstance(m, types.FunctionType):
            t = types.FunctionType
            starter = None
            break

    return t, m, starter