OpenCL host code - phase -1

0. For main changes:
-> check GMX_USE_OPENCL macro in hw_info.h
-> modify OCL_FILE_PATH with your path to nbnxn_ocl_kernels.cl
1. Added CL folder in src for OpenCL 1.2 headers - to be later removed
2. Added gpu_utils.c for OpenCL functions similar with those from
gpu_utils.cu
3. Renamed some functions from gpu_utils.cu so that it's clear that they
refer to CUDA
4. Added GMX_USE_OPENCL macro in hw_info.h - to be moved to a more
proper location
5. hw_info.h - extended gmx_gpu_info_t, gmx_gpu_opt_t structures to
contain OpenCL related parameters - to be later reviewed and cleaned-up.
6. Added nbnxn_ocl__kernels.cl - convolution kernel from NVIDIA OpenCL
code samples. To be used for testing.
Ported vecops. Untested
Work in progress: nbnxn_opencl_kernel_utils.clh
Vectype and kernel_utils ports to OpenCL.
They compile ok with NVIDIA platform, but not with AMD (yet)
Fixed on opencl_types header. Remove some problematic includes in nbnxn_pairlist.h
Port of main kernel file. Tested only compilation of base kernel (no prune, no energy).
Merge branch 'asc' into dk-dev
Bad merge, was missing Anca's ocl folder. Followed that naming -> changed opencl to ocl
Fix include path and name
Merge pull request #1 from dkarkoulis/dk-dev

Dk dev
OpenCL host code - phase 0.0.0.1

1. Added nbnxn_ocl_types_ext.h
2. Added nbnxn_ocl_data_mgmt.c
3. Added nbnxn_ocl_data_mgmt.h
4. Updates for integrating nbnxn_opencl data structure
init_atomdata_first OCL imple, updated cl_atomdata_t

1. init_atomdata_first first implementation for OpenCL
2. Updated cl_atomdata_t structure
3. Fixed errors for pow functions - now both parameters are of type real
Function, data structures updates for OCL - see comments

1. Added HAS_CC_3_0_OR_LATER to replace fields from CUDA data structure
- needs to be later removed.
2. Replaced pointers with cl_mem for fields in cl_nbparam_t
3. Updated init_ewald_coulomb_force_table for OpenCL
4. Updated init_atomdata_first for OpenCL
5. Updated set_cutoff_parameters for OpenCL
6. Updated pick_ewald_kernel_type
7. Added command_queue to ocl_gpu_info_t
Updates for OCL - see comments

1. Added OpenCL host implementation for existing CUDA host functions:
- nbnxn_ocl_min_ci_balanced
- ocl_copy_H2D_generic
- ocl_copy_H2D_async
- ocl_copy_H2D
- ocl_free_buffered
- ocl_realloc_buffered
- init_timers
- nbnxn_ocl_init_pairlist
- nbnxn_ocl_upload_shiftvec
- nbnxn_ocl_clear_f
- nbnxn_ocl_init_atomdata
- nbnxn_ocl_init_pairlist
- nbnxn_ocl_init_atomdata
- nbnxn_ocl_upload_shiftvec
- nbnxn_ocl_min_ci_balanced
2. cl_atom_data : changed fields to cl_mem type
3. cl_timers: replaced 2 event fields by 1 event and two time fields
Updates for OCL - see comments

1. Added nbnxn_ocl.c file - the equivalent of nbnxn_cuda.cu
2. Added nbnxn_ocl.h file - the equivalent of nbnxn_cuda.h
3. Added nbnxn_ocl_kernels.clh - the equivalent of
nbnxn_cuda_kernels.cuh
4. Added kernel obj initialization in init_ocl_gpu (needs improvements)
5. ocl_gpu_info_t - added new fields for pointer to kernels

ISSUES
-------
1. Clean-up required for headers included in nbnxn_ocl_kernel_nvidia.clh
See cl build errors if commenting:
__kernel void test
and un-commenting:
__kernel void NB_KERNEL_FUNC_NAME(nbnxn_kernel, _F_cuda_opencl)
2. Some kernel parameters are currently data structures stored on host.
Also the data structures contain pointers. Must be redesigned.
See clEnqueueNDRangeKernel function call for comments.
Fixing Cmake for the OpenCL build. Still in progress, will not work right now in a machine without CUDA.
Merge pull request #2 from dkarkoulis/dk-dev

Fixing Cmake for the OpenCL build.
On-going fixes for the OpenCL build
On-going clean up to make the pure opencl build work
Build successful now. Many functions left to be implemented and more cleaning up left to do
Successful launch of empty OpenCL test kernel

1. The list of parameters for the kernel in nbnxn_ocl_kernel.clh has
been modified to include:
- data structures with non-pointer fields
- pointers to device buffers
- textures
TO DO: move the data structures in a separate file. Now they are defined
twice: once in the host code, once in the device code.
2. Added a function to handle the transfer of data from the format used
by the host to the format used by the device.
Advantages:
- the main opencl host side structure, nbnxn_opencl_ptr_t, remains close
to the cuda one; so does the code using them
- in the future, the cuda and opencl structure may be combined into one
single structure
- the host <-> device format adjustment is done in one single function
as opposed to being spread out through the entire code
Disadvantages:
- moving simple data from one structure to the other
TO DO: check if the kernel results are stored only in buffers or also in
some of the structure fields. Structures are currently passed by value.
4. Disabled all includes for nbnxn_ocl_kernel.clh
TO DO: cleanup the headers and include only what's needed