save one dot: use intermediate if we need it twice

xty = np.dot(xstar.T, exog)

use np.dot if we have just two (avoids detour and we know what it is)

actually: never use chain_dot !!!     (3! :)
you always want to control which dot products are calculated first, don't build (nobs,nobs) matrices if you can easily avoid it