Fix PIL Handling of non-uint8 Images and Add Tifffile Support.

The previous behavior was as such:

```python
In [3]: %paste
In [5]: io.imsave('io3.png', np.array([[0, 1], [0, 4196]], dtype=np.uint16), plugin='pil')

In [6]: im = io.imread('io3.png', plugin='pil')

In [7]: im

## -- End pasted text --
Out[3]:
array([[  0,   1],
       [  0, 100]], dtype=uint8)
```

We can now properly handle all the basic types of images.  Unit16 and Int16 are handled natively.  Floating point images are converted to uint16 and boolean are converted to uint8.  I added tifffile.py/c to the PIL plugin and removed the separate plugin.  This assumes that PIL will be added as a dependency.
We've already checked the last dimension in `imsave` and raised a `ValueError`.