TYP: Type hints & assert statements
This PR addresses two concerns of best practices:

- use of assert statements outside of test contexts; addressed by replacing with explicit value checks and exception raising
- improved type hinting; several instances where this was previously missing or incorrect, notably `DataFrame.merge` for which the correct use of strings in the `indicator` argument did not match the boolean hint

Thanks for your time, happy to discuss or revise any of these as you see fit if they aren't consistent with the contribution guidelines.