some more type-safety and exception handling in pcl_defs.pxd

XXX the at() members of PointCloud[T] can also throw:

>>> a = np.random.randn(10000, 3).astype(np.float32)
>>> p = PointCloud()
>>> p.from_array(a)
>>> p[10000]
terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check
Aborted

... but a bug in Cython's code generator prevents "except+" from
working with a function returning a reference.
optimize some methods that call at

Using pointers to work around broken C++ reference support in Cython.
operator[] seems to be completely broken in Cython.

E.g.

>>> a = np.random.randn(10000, 3).astype(np.float32)
>>> p = PointCloud()
>>> p.from_array(a)
>>> %timeit p.to_array()
10000 loops, best of 3: 23.4 µs per loop

Previously 50.8 µs per loop.
nogil around PCD loader/saver
fix radius_search docstring
move to package structure

Allows splitting the big pcl.pyx module and writing parts
in pure Python to speed up compilation.
Pythonic pcl.load function, +PLY format loading
improved PointCloud constructor
pcl.save for dumping to file; PCD and PLY format
add & for ref args in save/load functions
Merge pull request #31 from larsmans/io

New Pythonic pcl.{load,save} functions; PLY format support