Repository: imageio/imageio

Issue:
Creating Array from preexisting Array drops metadata
```python
>>> import numpy as np, imageio
>>> t = imageio.core.Array(np.array([1, 2]), meta={"foo": 1})
>>> (t * 2).meta
Dict([('foo', 1)])
>>> t[:].meta
Dict([('foo', 1)])
>>> imageio.core.Array(t).meta
Dict()
```
Given that most operations on an Array appear to just keep the metadata as is, it seems reasonable to expect that creating a new Array from a preexisting one, without explicitly setting new metadata, should also keep the original metadata.

Discussion:
coveralls: 
[![Coverage Status](https://coveralls.io/builds/34166750/badge)](https://coveralls.io/builds/34166750)

Coverage remained the same at 88.97% when pulling **af308b7c7ea95dd55bce07b06366bd7e969d244b on anntzer:copymeta** into **4a72d564a6d36d53b5209b8bcc497e8dc5e43bd5 on imageio:master**.


Patch:
diff --git a/imageio/core/util.py b/imageio/core/util.py
index 8f382e7..c433cae 100644
--- a/imageio/core/util.py
+++ b/imageio/core/util.py
@@ -124,7 +124,7 @@ class Array(np.ndarray):
         if not (meta is None or isinstance(meta, dict)):
             raise ValueError("Array expects meta data to be a dict.")
         # Convert and return
-        meta = meta if meta is not None else {}
+        meta = meta if meta is not None else getattr(array, "meta", {})
         try:
             ob = array.view(cls)
         except AttributeError:  # pragma: no cover


Test patch:
diff --git a/tests/test_core.py b/tests/test_core.py
index 73a9001..300fdde 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -388,6 +388,10 @@ def test_util_image():
     isinstance(im, np.ndarray)
     isinstance(im.meta, dict)
     assert str(im) == str(a)
+    # Preserve after copy
+    im2 = core.util.Image(im)
+    assert isinstance(im2, core.util.Image)
+    assert im2.meta == im.meta
     # Preserve after action
     im2 = im + 1
     assert isinstance(im2, core.util.Image)