Theory of reproducing kernels for Hilbert spaces of vector valued functions