gsl::at should use std::ptrdiff_t instead of size_t. This patch fixes that, and adds missing unit tests