Enable -Wunderspec, note dialyzer error.

After changing the type of compose/1 to maybe_improper_list/2 as dialyzer
suggests:

```
> make validate
==> triq (compile)
==> iron (compile)
Compiled src/fe.erl

=ERROR REPORT==== 5-Apr-2013::11:04:41 ===
Error in process <0.29.0> with exit value: {{badmatch,false},[{erl_types,t_maybe_improper_list,2,[{file,"erl_types.erl"},{line,1361}]},{erl_types,t_from_form,5,[{file,"erl_types.erl"},{line,3669}]},{erl_types,t_from_form,5,[{file,"erl_types.erl"},{line,3728}]},{erl_types,list_from_form...

dialyzer: Analysis failed with error:
{{badmatch,false},
 [{erl_types,t_maybe_improper_list,2,[{file,"erl_types.erl"},{line,1361}]},
  {erl_types,t_from_form,5,[{file,[...]},{line,...}]},
  {erl_types,t_from_form,5,[{file,...},{...}]},
  {erl_types,list_from_form,5,[{...}|...]},
  {erl_types,t_from_form,5,[...]},
  {erl_types,t_from_form,3,...},
  {dialyzer_contracts,'-contract_from_form/5-fun-0-',...},
  {dialyzer_contracts,...}]}
Last messages in the log cache:
  Reading files and computing callgraph... done in 0.21 secs
  Removing edges... done in 0.02 secs
make: *** [dialyze] Error 1
```

Bummer!

Signed-off-by: Brian L. Troutwine <brian@troutwine.us>
Remove compose/1.

The definition of compose was never truly satisfying and, as mentioned in the
last commit, properly typing compose/1 causes a Dialyzer crash. -Wunderspecs is
valuable enough that I don't want to be without it and I'm _reasonably_ sure
that a NIF/BIF can implement compose/1 generally.

Signed-off-by: Brian L. Troutwine <brian@troutwine.us>
Merge pull request #24 from blt/underspecs

Underspecs