make get_firstbday, get_lastbday nogil
These are only used in `tslibs.offsets` and in tests, _and_ every use is preceeded by a call to `monthrange`.  But because `monthrange` returns a tuple, it cannot be declared `nogil`.  This PR removes the call to `monthrange` in favor of the two separate calls that go into `monthrange` (actually only one is needed for `get_first_bday`).  On the side we get rid of a few unnecessary calls and get to nogil two more cases worth of the apply_index loops.

There are more cases coming up for `shift_months` (i.e. more subclasses getting implementations of `apply_index`) and these will benefit from these changes too.

- [ ] closes #xxxx
- [ ] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry
