Only overwrite pass_block if there's a value

This prevents pass_block from being overwritten with nil which happens when the superclass has (non-matching) routes.

This bites in development as Sinatra::Base registers "get '/__sinatra__/:image.png'" only in development mode, so everything works fine in production but not in development.
Improved self-hosted server.

- Will now stop the self-hosted server _and exit_ the program on INT and TERM signals.
- No more multiple Sinatra messages on multiple signals.
- Stopping/quitting a server possible using .quit! and without the need of the actual server and handler_name.
Simplify and Improve readability on some conditions
Merge pull request #1 from scudelletti/self-hosted_server

Simplify and Improve readability on some conditions
Test for explitily setting layout true

See #727

If the default options for a template include :layout => false, it
should be possible to override this in the explicit options to the
rendering method.

e.g.

    set :slim, :layout => false

    get '/' do
      slim :index, :layout => true # should render with layout
    end
Allow overriding :layout => false with true

Fixes #727

The :layout option for templates controls both which template should be
used as the layout and whether a layout should be used at all.

If the default options for an engine include :layout => false, then
passing in :layout => true in the call to the render method shouldn't
use false as the value of :layout, it should fall back to
@default_layout (the "default default").
Fix some warnings
Further refactored the self-hosted server behaviour.
drop `entries` variable and use `map!` instead of `map` on new array to save new object creation
use `map!` instead of `map` on new array to save new object creation

also change "1.0" (string) to `1.0`(float) since we save conversion from `to_f` applied on it
Extract `DROP_BODY_RESPONSES` to a constant
avoid creating an array an then doing a join by use of string interpolation
extract `ETAG_KINDS` to a constant

also use string interpolation instead of  addition
use destructive merge operations on `options` to save new hash creations
change `.` indentation to fix jruby syntax error
Option hash not used in self#new
Merge pull request #758 from somu/unused-options-hash

Option hash not used in self#new
Merge pull request #708 from rlivsey/pass_block-with-superclass

Only overwrite pass_block if there's a value
Merge pull request #710 from tbuehlmann/self-hosted_server

Improved self-hosted server.
Merge pull request #728 from mattwildig/false-layouts

Allow overriding global :layout => false setting with true on per-method basis