Make the type of ierror more general

Before, ierror could only be used where Idris () was expected. However, it
should be usable in any situation as it halts execution.
Clean up implementation of type providers

The type provider elaboration has been made more readable and the supporting
Idris library has been simplified.
Further simplify of type provider elaboration

Nested "if" and "do" blocks have been eliminated.
Tiny further simplification of type provider elaboration
Merge pull request #317 from david-christiansen/providers

Providers update