John Cook (soldier, b. 1847)