Have getRemote throw if there is no remote
Fix currentBranchIsDescendantOf to respect its params
Fix runOnCurrentOrSpecifiedBranches to actually run each branch

It was previously just running only on the first branch,
once per provided branch.
Oops.
Add some proper comments

A few files remain,
but this should be less spartan than things were before.