Add 'out' argument for linalg.dot.

This PR adds an optional 'out' argument to `linalg.dot`.

The 'out' argument can be used to pass in additional GPUArray in which to store the result of the computation. This comes in handy as it saves additional allocations (thus, it's probably faster if we repeat the same operations over and over). Such an argument is very common in numpy-type functions.

**NOTE:** I would've liked to add similar arguments to other functions in the `linalg` module, but many of them already have an `overwrite` argument that serves a similar purpose. It might make more sense to replace that argument with an `out` argument, and then do
    
    if out is a_gpu:
        # call inplace kernel

inside of the functions.

I didn't feel comfortable making this change, as it clearly breaks backwards-compatibility. But I think it would be a nice thing to have, and I'd be happy to send the relevant PRs.