Barcelona end Aston Villa's perfect Champions League start with an enthralling win at the Spotify Nou Camp.