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)
```

The new `imsave` docstring says it best:

```
    Notes
    -----
    Tiff files are handled by Christophe Golhke's tifffile.py [1],
    and support many advanced image types including multi-page and
    floating point.

    All other image formats use the Python Imaging Libary.
    See PIL docs [2] for a list of other supported formats.
    All images besides single channel PNGs are converted using `img_as_uint8`.
    Single Channel PNGs have the following behavior:
    - Integer values in [0, 255] and Boolean types -> img_as_uint8
    - Floating point and other integers -> img_as_uint16

    References
    ----------
    .. [1] http://www.lfd.uci.edu/~gohlke/code/tifffile.py.html
    .. [2] http://pillow.readthedocs.org/en/latest/handbook/image-file-formats.html
```
I suggest replacing `255` with `np.iinfo(dtype).max`. This will ensure that the roundtrip works for all values of uint16. (though you might need to rejigger to not use with color test images.)