[MRG] Input validation refactoring

Refactor input validation to make it more consistent.

Todo
* [x] Tests
* [x] docstrings
@amueller have you thought about deprecating this function that we have `check_array` to check assumptions on individual datastructures? If yes what motivates you not to deprecate it? To much code to update at once?