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).

How about `CL_MEM_ALLOC_HOST_PTR`?