added a ton of specs, refactored method_missing a bit