Loading Icons Into Custom Addon
Recently added a custom icons module to an addon... thought it might be an interesting answer to this q.  Code is basically the text editor custom icon template.

Icons stored in an icons folder inside the addon's folder.

import bpy

from os import path
icon_dir = path.join(path.dirname(__file__), "icons")
preview_collections = {}

def register():
    # Note that preview collections returned by bpy.utils.previews
    # are regular py objects - you can use them to store custom data.
    import bpy.utils.previews
    pcoll = bpy.utils.previews.new()

    # path to the folder where the icon is
    # the path is calculated relative to this py file inside the addon folder
    # load a preview thumbnail of a file and store in the previews collection
    icons = {"midi" : "midi.png",
            }
    for key, f in icons.items():
        pcoll.load(key, path.join(icon_dir, f), 'IMAGE')

    preview_collections["main"] = pcoll


def unregister():
    for pcoll in preview_collections.values():
        bpy.utils.previews.remove(pcoll)
    preview_collections.clear()


Registered: icons.register() is called from my addons register method (in __init__.py ), after imp(ort)ing icons module.

Now in any other file, i can import the preview dictionary, then use in a draw method

    def draw_header(self, context):
        from sound_drivers.icons import preview_collections
        pcoll = preview_collections["main"]
        icon = pcoll["midi"]
        self.layout.label("", icon_value=icon.icon_id)


Note sound_drivers is the name of addon, change to suit.