Fix 11761: aa.byKey and aa.byValue are not forward ranges.

The problem is that Phobos' `isForwardRange` template requires that
`.save` must be `@property`, otherwise it does not acknowledge the range
as a forward range; however, aa.byKey and aa.byValue's `.save` weren't
marked as such. This PR fixes this problem and introduces a unittest to
ensure the forward range criteria are satisfied.
DRY up the unittest.
Merge pull request #925 from quickfur/issue11761

Fix 11761: aa.byKey and aa.byValue are not forward ranges.