More tests and add constraint to MemoryObject.get_host_array

1. Update `.gitignore` file.
2. Add `Platform._get_cl_version` (since this is where the version check really happens)
3. Only allow `MemoryObject.get_host_array` on MemoryObject with `CL_MEM_USE_HOST_PTR`. This is AFAIK the only pointer that is guaranteed to have valid content according to the standard [after a synchronization point](http://www.khronos.org/message_boards/showthread.php/6912-Clarify-CL_MEM_USE_HOST_PTR). The pointer returned by `clGetMemObjectInfo(CL_MEM_HOST_PTR)` is the pointer passed to the create function so it does not have any meaning except when `CL_MEM_USE_HOST_PTR` is used (and might event be un-initialized if there's neither `CL_MEM_USE_HOST_PTR` or `CL_MEM_COPY_HOST_PTR`, which is the behavior of the intel beignet GPU dirver)
4. Add tests for `Platform.get_devices` (with all possible `device_type` values), `UserEvent` and `MemoryObject.get_host_array`(including the constraint described above).

I thought so too but it seems that this pointer is just the one passed to the `clCreate*` function when creating the memory object, i.e. it is the same with the input address for `CL_MEM_COPY_HOST_PTR | CL_MEM_ALLOC_PTR` even though the host pointer should be different in this case.

I have also checked this using beignet, the open source OpenCL driver for IvyBridge and Haswell GPU on Linux.
In `cl_mem_new_buffer` (directly called by `clCreateBuffer`) the `host_ptr` (which is [retrieved with `CL_MEM_HOST_PTR`](http://cgit.freedesktop.org/beignet/tree/src/cl_mem.c#n100)) is [only assigned a value](http://cgit.freedesktop.org/beignet/tree/src/cl_mem.c#n383) for `CL_MEM_USE_HOST_PTR` or``CL_MEM_COPY_HOST_PTR` to the input host pointer.