Added keyword argument support
- If the last argument passed is an object with a subset of the expected
  keywords it will be identified as a kwargs object and used
  appropriately