Fix for when the menu's update function returns FALSE and no menu is shown.

The ObMenuFrame was not being freed, and the child pointer was being left
pointing to the frame that was not visible.
hide the menus before shutting them down on reconfigure
skip empty strings when splitting paths in the environment
Add another BSEARCH function that lets you search through an array of objects.

If you give it a value x, the macro lets you pull a value out of each object
that you want to compare to x.
add menu_sort_entries() which sorts all entries in an ObMenu

this function sorts each group of entries that appear together between two
consecutive separators (or ends of the list)
Properly build path names for TryExec
Allow client destroy notify functions to be removed based on the data associated with them.
Create some Openbox release scripts:

release/bugs: Prints a list of bugs that are mentioned in git commits for a
  git revision, since previous release.
  - Very useful for updating the CHANGELOG file!

release/go: Tests a git revision for correct compilation, and prepares files
  for release.
  - Makes the tarball
  - Makes a GPG signature for the tarball
  - Tags the release
  - Spits out URLs to edit and gives the changelog for copy/paste.

release/email: Sends an email to the Openbox mailing list with the changelog
  and details about the release.  Call this with the same parameters used for
  running release/go once it is finished, and the files are uploaded, etc.
  - Also emails mikachu re freshmeat.net
Fix prompt cleanup (was not going through the list correctly when freeing items)
Fix release scripts: test en .po files for correct version. correctly find previous version tag in git and display it.
Allow an xml tag to be unregistered from the xml parser.
Make the inactive osd text color fall back to the old osd property, and lastly inherit from the unfocused window color.
Make ResizeRelative resize in terms of pixels for windows with resize increments (bug #5228)

If the resize is less than the window's resize increment then we bump it up
to ensure a resize does at least happen.
Select the menu item under the mouse when the mouse is moved (bug #5237)
Pick the monitor most relevant to a rectangle more cleverly.

When monitors overlap (this happens with cloning), we were choosing a monitor
to associate with a window, for maximization for example, somewhat arbitrarily.

Now we have a more clever algorithm that considers the configured primary
monitor first, and that does not prefer monitors based on their sizes, but only
only how much of the window is in the monitor, excluding parts that were claimed
by another monitor already.
Don't make desktop switching interactive when no mods used. (bug #5203)

Make mod state passing more consistent, and always give actions the full state
instead of stripping sometimes. (They ended up expecting it stripped always).
check RECT_INTERSECTS_RECT before using RECT_SET_INTERSECTION
Use the KeyCode to directly find the modifier mask. (bug #5173)

We were finding the KeySym first, and then converting back to a modifier mask.
But KeySym on a key's release can differ from on its press, and we don't need
them to determine the modmask from the keycode.

[setxkbmap -option "grp:shifts_toggle"] turns Shift_L into XK_ISO_Prev_Group on
key release, and Shift_R into XK_ISO_Next_Group.
Ignore enters on windows that are raised over focused window while being mapped.
Link X into libobt (Fixes compile on debian).