Canada claimed a hard-fought win over Italy to set up a meeting with Australia in the Davis Cup final in Malaga.