OCSADV-27: VoTable parser improvements

Several improvements to the VoTableParser and support for **ucac4** catalog output:
* The parser used fields to distinguish data pieces but it should really use just the **ucd**, a Field's name is not very relevant
* Parse magnitude errors
* Support magnitudes for IR bands
* Parse proper motion if available. An update to the `ProperMotion` class is included
* Fixes a case where **ucac4** returns a magnitude without a band (The value is ignored)
* Minor code formatting fixes
This is fine, just wanted to point out a couple things. First, you can rewrite the body of the method as follows, which I think is a little easier to follow:

```scala
items.map(i => i.field.ucd -> i.data).toMap
```

And in this case **because the return type is known** you can use a terrible thing from stdlib collections that lets you construct the `Map` in a single pass:

```scala
items.map(i => i.field.ucd -> i.data)(collection.breakOut)
```

I probably would stick with `.toMap` since it makes your intent clearer, but `breakOut` can be useful if you run into performance issues and want to minimize the number of traversals.