around: change how around method modifier works

Change the around method modifier such that modifiers receive, and
are responsible for calling (if appropriate), the original method.

This means that method modifiers can now modify arguments, modify
return values and decide whether to call the original method at all,
in line with the around modifier in Moose.
type: add spec for constructing with wrong type

Add a test case that asserts that constructing with an attribute
value of the wrong time raises TypeError.
roles: rename metaclass and add base class

To make role definition simpler and to make the interface consistent
with that of regular Elk classes, rename ElkRole to ElkRoleMeta and
define the ElkRole base class which has __metaclass__ = ElkRoleMeta.
default: pass instance as argument to callable

When using callable defaults, pass the object as an argument.  This
brings Elk in line with Moose behaviour.