Split fastpath IntegerArray constructor and general purpose constructor
Related to the discussion we were having on the PR: https://github.com/pandas-dev/pandas/pull/21160/#discussion_r201209246 (@jreback @shoyer).

Opening this PR for discussion, to *show* what I meant there, to hopefully make it more concrete discussion.

Briefly the changes / rationale:

- Separate the "fastpath" and general purpose constructor (in master everything is passed through `coerce_to_array`:
  - `IntegerArray` is the fastpath if you know you have a proper `values` and `mask`
  - `integer_array` as general purpose constructor function, that eg parses lists, detects NaNs etc (exact API to discuss of course)
- IMO this clear separation makes the code cleaner (in all internal usage we know what we want). In the past we often added a `fastpath` keyword to the constructor, but IMO we should not repeat that pattern in new code (it is overloading the main constructor by combining things).
- This also has the benefit of improved performance. Eg on an array of 1e5 values, the current constructor has an overhead of ca 80 µs, not much of course but that means that a simple slice is 82 instead of 2 µs (of course, this improvement does not need the exact proposal in this PR, you could certainly do a PR adding a fastpath keyword that achieves the same boost).



Note that this is not yet a fully implemented PR:

- Docstrings still need to be updated
- Tests for new behaviour needs to be added
- `coerce_to_array` can be simplified a little bit, as currently the  `mask` argument is nowhere used (unless we foresee use cases for that?) 