Find the program within this manifest. If key is found, and it contains
        a list, iterate over the list and return the program that matches
        the controller tag. NOTICE: program_path must have a leading slash.

def get_program(self, program_path, controller=None):
        """
        Find the program within this manifest. If key is found, and it contains
        a list, iterate over the list and return the program that matches
        the controller tag. NOTICE: program_path must have a leading slash.
        """
        if not program_path or program_path[0] != '/':
            raise ValueError("program_path must be a full path with leading slash")

        items = program_path[1:].split('/')
        result = self
        for item in items:
            result = result[item]

        if hasattr(result, "lower"):
            # string redirect
            return self.get_program(result)

        elif type(result) is Manifest:
            return result.get_program('/')

        elif hasattr(result, 'append'):
            matching_blank = []
            for program in result:
                if controller in program.controllers:
                    return program
            
                if not program.controllers or not controller:
                    # no exact matching controllers for this program.
                    # Use the first controller with no
                    matching_blank.append(program)
            if matching_blank:
                return matching_blank[0]
            else:
                raise ProgramNotFound("No matcning program for %s controller" % controller)

        return result