Removed awkward BattleUnit copy constructor, which fixes a memory leak

I think the `hypotheticalUnit` copy can be avoided by just using the actual `queryingUnit` and saving and restoring the positions. Everything except for the positions (and tile updates) should be non-mutating as far as the unit class is concerned, so I also made a few functions explicitly `const` to highlight that.

Without the hypothetical unit, there's no need for the awkward non-const copy constructor. That one was violating the rule-of-three and preventing us from deleting the AIState properly.