Joe Willock scored twice including a late winner as Newcastle took another step towards a second Wembley appearance of the season with a hard-fought 3-2 victory over Birmingham in the FA Cup.