cfme.web_ui.menu works with upstream nav

The upstream appliance (and its descendants) render the nav tree a little differently.
Fortunately, they still have the same element structure as the current version of CFME,
so it was possible to rework the menu nav to function on both.

In the process, I had to break some things apart, which resulted in what looks like a
pretty massive rewrite. The code could probably use some more comments/docs, but I'm
too close to it at the moment to be a good judge of what needs illumination.
nav menu tests
Merge pull request #585 from seandst/upstream-compatible-nav

cfme.web_ui.menu works with upstream nav