WIP: theano-like transform from dot -> gemm

Inspired by the fast turnaround on the last theano PR, I decided to push forward a little further:  this time I've made a graph that uses the "Dot" Op, which does not have a corresponding op in the ir. How would you deal with this?  Is the idea that for such cases, People With Good Judgement will decide whether to add an IR op?  Can IR Ops be added from outside the project as long as they are accompanied by code transformations that lower them?

I'd like to push this example as far as implementing an inplace update function with theano, that would use a BLAS gemm function to update a matrix.  This brings up how to transform the graph of add, mul, and dot into gemm, and how to work with preallocated data with PyKit (can PyKit generate modules with state?).