## Add functions relating to multidimensional array indexing conversions

Similar functions are provided in CL, but they operate on *arrays* when all they really need are the *dimensions*. This sometimes proves an annoyance, and I thought I'd submit the more general functions here. The behavior should exactly mimic that of the CL counterparts, except that the error which `array-in-bounds-p`

signals is implementation-dependent and `dim-in-bounds-p`

always signals a `SIMPLE-ERROR`

.

This PR implements associated tests as well.

EDIT: I have also implemented a function to convert a row-major index to axis indices based on a given set of dimensions, and have implemented a test for that as well

I wanted to further propose extending these functions to cases when fewer indices than the rank of the array are given, ie something like

```
(defvar a #2A((a b c) (d e f))
(row-major-index (array-dimensions a) 0 0) ;; 0
(row-major-index (array-dimensions a) 0) ;; 0 . Currently an error
(row-major-index (array-dimensions a) 1) ;; 3 . Also currently an error
(dim-in-bounds-p '(4 3 2 1) 0) ;; t . Currently an error
```

This behavior (unimplemented, to be clear) diverges more from the spec, but I often find it useful when working with multi-dimensional arrays. I can update the PR if we decide to support it.