Flexorigin
Getting it installed.
First download and install the addon from the Blender Market. After this it will show up in User Preferences, Addons tab, Object category with the name "FlexOrigin". Enable the addon by ticking the checkbox on the right and if you want click "Save User Settings" to make the addon permanently enabled! If you wish to choose a hotkey to start FlexOrigin: In the Input section of User Preferences at the bottom of the 3D View > Object Mode section, click the 'Add New' button. In the Operator Identifier box put 'object.flexorigin'. Assign a hotkey. Save User Settings.
Using FlexOrigin.
When installed and enabled, invoke FlexOrigin for the active object by clicking the 'FlexOrigin' button in the Tools tab of the 3DView->leftpanel or using the Spacebar and typing 'FlexOrigin'. The 2.80 version appears in its own tab of the 3DView->rightpanel.
FlexOrigin works by creating an empty for the object you want to control the origin and/or local orientation of. This empty can be transformed with standard methods: Gkey, Rkey, manipulator, with or without standard snapping to volume/face/edge/vert/increment or any means of animating it. The origin will move along with the empty in real time while the empty is being transformed. Also the local orientation will be updated in realtime while rotating the empty. The empty becomes part of your scene and will continue controlling the origin and local orientation until it is deleted. This way empties can be created for as many objects as required. A control empty for an object with name 'OBJECTNAME' will be named 'OBJECTNAME_FlexOrigin'. Renaming this empty is not possible. FlexOrigin will update the origin and the scene in real time while the empty is transformed, a very agreeable scenario for those wanting to interactively tune the effect of some modifiers, like Mirror or Cast. Assigned empties will keep working after .blend file saving/loading.
Since v1.4.0 FlexOrigin, for added flexibility, now also works from EditMode. Clicking the 'FlexOrigin' button will cause Blender to enter a temporary mode in which you can only use Gkey (+ Xkey, Ykey, Zkey for axis grab) to set the origin (once set by leftmouse button, Blender will exit the temporary mode) or use ESCkey or rightmouse button to cancel. When an empty had already been created for the object in ObjectMode, this origin will be moved in EditMode too, but, when no empty exists yet, FlexOrigin will use an Immediate Mode, that allows setting the origin without any creation of an empty at all for quick immediate tweaks.
Also in EditMode theres now a snap button which allows to center the origin between all selected mesh elements, allowing for example edge midpoint snap or vert snap.
Also in EditMode a helper button that allows quickly setting the 3D cursor to the origin, and the pivot point mode to this cursor, to allow quick rotating around the (newly) set origin.