proposal: consider using named key word arguments instead of **options

This commit does not implement the entire change, it's just an example. My issue is that you have to read the source code to use the **options. This pretty much is the case over the entire library. It gets even more confusing when you use parts of the options in one method, then pass the rest along to another. 

Another option is to simply document the arguments. 

Personally I'm not committed to either solution nor think they are very good — so if you have better suggestions I'm open for proposals.