Implement broadcasting
To do list:
- (done) arrays of given shapes, checked statically.
- (done) arrays of symbolic shapes, checked at runtime prior to calling the kernel.
- (done) proper precondition checking for semi-dynamic broadcasts (shapes not known when assembling the expression).
- (done) add broadcast support to ufuncs.
Closes #7 (closed), #8 (closed)
Edited by Xiaoyu Wei