Early work on runtime type discovery

This code is preliminary work on making ImageJ discover the data types it
can handle at runtime. The data types wrap Imglib types. The type converter
code will use this discovery and casting to change types. There are examples
of new types here too. This shows that extensibility is possible.
Outline how type changing can work
Fix copyright headers
Support unsigned byte types

This addition allows us to test that we can successfully use the new
infrastructure to change data types between Long and UnsignedByte.
Note a TODO
Add a floating DataType for more testing
Add a TODO
Make DataTypes for all existing pixel impls
Set default pixel type to current data type
UnboundedInteger now implements IntegerType iface
UnboundedFloat now implements RealType iface
Minor documentation changes and code cleanup
Add hooks for complex number data type support
Minimize object creation during casting
Fix bug in casting operation
Make DataTypeService an interface

While at it improve the internal implementation of the default
DataTypeService.
Add DataTypes for complex numbers
Fix casting bug
Make NewImage use discovered DataTypes

It no longer uses bit depth, float flag, etc.
Minimize object creations in NewImage