Various improvements

The commit messages are pretty detailed.

If you're wondering why I passed the `parentName` down the chain (into `QSObjectForAXUIElementWithNameProcessType`) , as opposed to the parent element, then got the name in the `QSObjectForAXUIElementWithNameProcessType` method:

* For some reason trying to get the name there would always give `nil`
* Optimisation: Only need to get the parent name once for all children