Initial proof of concept: keep metadata in FieldImpl

Hey @jon4than,

I wanted to let you take a quick look at this before we merge.  I decided to add the new metadata map at the `FieldImpl` level instead of the `FlatField` level because I think that will avoid a lot of casting and type checking when we try to keep track of this new field in the IDV util classes (since most of the methods there accept and return `FieldImpl`'s.

A quick test to make sure this stuff is doing something would be to send the result of `sub(a, b)` (where `a` and `b` are objects returned from `getADDEImage` or `loadFile`) into `createLayer`.  You should end up with the same layer labels as if you had just displayed `a` itself.

Let me know what you think or feel free to go ahead and merge.

[1720]