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
A little more background, `Functor[F]` gives you `map`; i.e., `F[A] => (A => B) => F[B]`. You can compose functors for `F` and `G` to give you `F[G[A]] => (A => B) => F[G[B]]`, so it gives you a `map` that works on things two "levels" down. And you can continue to compose indefinitely for deeper stacks of functors.

```scala
scala> val f = Functor[List] compose Functor[Option]
f: scalaz.Functor[[α]List[Option[α]]] = scalaz.Functor$$anon$1@1a3cee2a

scala> f.map(List(Some(1), None, Some(2)))(_ + 10)
res0: List[Option[Int]] = List(Some(11), None, Some(12))
```

`Apply` is a subtype of `Functor` that gives you `F[A] => F[A => B] => F[B]` and it composes the same way. So that's what we are doing here. `apply2` just applies a 2-arg function and `.sequenceU` flips `F` and `G`.