Improving type inference by removing Dynamic checks

Using a trick from [Jason O'Neil](http://jasono.co/2014/01/09/accept-either-string-or-int-without-resorting-to-dynamic/) to enforce different types of objects. The only downside is that it requires `AcceptEither` to be declared every time the type parameters differ (`String`/`Int`, `String`/`Array<String>`, etc...).

Overall this should improve compile time type checking.