add support for CUDA-enabled toolchains

This PR includes:

* modifications to the existing toolchain support to allow having co-compilers in a compiler toolchain (by using a prefix)
 * make fetching of `COMPILER_*` and `LIB_*` constants prefix-aware
 * make `_set_compiler_toolchainoptions`, `_set_compiler_vars` and `comp_family` methods prefix-aware
 * add support for updating compiler variables after they've all been set
 * add support for templated list values in `option_map`
* add support for using a CUDA (co-)compiler in a compiler toolchain
 * and extend list of known compiler variable constant with `CUDA_*` elements
* add definitions of the `gcccuda` and `goolfc` compiler toolchains
* extend unit tests and add required test modules for these tests

For a CUDA-enabled toolchain specifically, this would yield an environment variable like `$CUDA_CC` that has the value below (for example), which can then be used in the software Makefile (will require patches, most likely).

```shell
$ echo $CUDA_CC
nvcc -ccbin=g++ -Xcompiler="-O2 -march=native" -Xlinker=" -lm -lcudart -lpthread"
-gencode arch=compute_35,code=sm_35 -gencode arch=compute_10,code=compute_10
```

This can be triggered by using the following toolchain-related values in an easyconfig file:

```python
toolchain = {'name': 'goolfc', 'version': '1.4.10'}
toolchainopts = {'cuda_gencode': [
    'arch=compute_35,code=sm_35',
    'arch=compute_10,code=compute_10'
]}
```