Fix AttackCharge not picking a new target if the current became invalid

This fixes #5568 by adding a IsReachableTarget check to properly handle units that walk out of range. 
If this gets attached to a unit, `RenderBuildingCharge` needs a rename - I have no problem doing this in a followup PR