Conservatives and SNP win Aberdeen by-election