Reduce method visibility where possible

Many methods that were marked as `protected` didn't actually need to be so.
This commit reduces the visibility level of these methods to `private` as
possible.
Adds convenience method for creating anonymous classes.

This adds a convenience method which creates an anonymous
subclass of the ParamsAction fixture class.  This keeps us from
polluting the parent class during tests.
Adds the ability to specify a class which defines the params.

This allows a caller to specify a specific class which which will
be handed the responsibility of processing the arguments which will
ultimately be passed to #call.

This begins to implement the "A" solution as laid out in issue #22.
Adds param whitelisting to Lotus::Action::Params.

Begin implementing the "A" proposal for implementing paramater
validation as laid on in issue #22.  This adds the param class
method which allows specific params to be whitelisted.
Defers call to symbolize!

Rewrite #_whitelist so it does not depend on the keys in the params
being symbols.  This was done in response to code review.
Adds the 'Validatable' module.

Moves code out of Lotus::Action into a mixin.
Fixes formatting.
Removes empty else block.
Responds to code review feedback.
Fix non-functioning Rack API reference

The existing link was 404ing. This replaces that link with (presumably) an identical alternative.
Merge pull request #34 from robyurkowski/patch-1

Fix non-functioning Rack API reference
Merge branch 'protected-methods' of https://github.com/fuadsaud/controller into fuadsaud-protected-methods
Merge branch 'fuadsaud-protected-methods'
Ensure the right level of visibility for Action's methods. Ref #16
Merge branch 'param_whitelisting' of https://github.com/mjbellantoni/controller into mjbellantoni-param_whitelisting
Merge branch 'mjbellantoni-param_whitelisting'
Fixed params whitelisting behavior in pure Rack env.
Allow Lotus::Action.params to accept a block

It creates an inner class which inherits from Lotus::Action::Params.

Example:

  require 'lotus/controller'

  class Signup
    include Lotus::Action

    params do
      param :first_name
      param :last_name
      param :email
    end

    def call(params)
      puts params.class            # => Signup::Params
      puts params.class.superclass # => Lotus::Action::Params

      puts params[:first_name]     # => "Luca"
      puts params[:admin]          # => nil
    end
  end
Store whitelisted param names only as symbols
Never use Lotus::Action::Params directly