Motion mixin refactor

The current motion mixins need to be refactored from their original design to support distinct in and out states—see #113 to learn more.

**Transition mixins:**
 - [x] Spin
 - [x] Fade
 - [ ] Hinge (this one is *complicated*!)
 - [x] Zoom
 - [x] Spin

Now each mixin has a `$dir` property, which determines if the element is being animated *to* (in) or *from* (out) a null state, which fixes out animations not working properly. In and out animations also properly use the `ng-enter` and `ng-leave` classes, respectively.

The structure of the mixins has also been cleaned up to make writing new ones easier.