Added (optional) port parameter

And a slightly convenient structure for parameter handling. Ok,
really I just wanted to finally use State and ErrorT for something.
Forgot to commit .cabal. Added .gitignore

Previous commit requires mtl dependency to be added to yesod-test.cabal,
which I forgot to commit, so previous commit isn't going to be
compilable.