The problem is that b[0..15] is a 16-bit bus (same as b by itself) and notzx is a single wire.
I originally built my ALU this way by making a chip called Widen16 with 1-bit in and 16-bit out that I could use to make code basically identical to yours work:
And16(a=x, b=notzx16, out=x1);
With a bit more thought, I realized that I could make the ALU using only the TECS chips by choosing what values get presented to the And/Add rather than computing them.
Note that the built-in constants true and false will match any bus width.