Making an addon, how do I pass information between a UI panel button press and my custom operator?
You can just add a property to your operator class.

This is done by inserting a line between the class declaration and the class methods.  Both bl_idname and bl_label are properties, these are inherited from bpy.types.Operator.

So lets say you want to add a property to an operator that prints monkey names.  The property will be called my_monkey:

class Monkey_OT_Operator(bpy.types.Operator):
    bl_idname = "wm.print_mokey_name"
    bl_label = "Print the name of my monkey"

    # 2.7x way to add a string property to hold the monkey name
    # my_monkey = bpy.props.StringProperty()

    # 2.8x way to add a string property
    my_monkey : bpy.props.StringProperty(name="My monkey name")

    def execute(self, context):
        print(self.my_monkey)
        return {'FINISHED'}


Okay so this should seem pretty simple, we've added a "slot" into the monkey operator class that holds a string.

Now to use this in your panel layout you can just set the property as you would for any normal class, for this you need a reference to your operator:

    row = layout.row()
    op = row.operator('wm.print_mokey_name', text = "Print Monkey")
    op.my_monkey = 'Suzanne'


Now when you print the button, it should print Suzanne.

Of course, you are not limited to string properties, you will find a more comprehensive use of properties in the Blender API documentation - Properties