Fix shrink for Array
Rename Environemnt#extend to Environment#concat

This is to not conflict with object extend in helpers.js (same
function as defined in underscore.js)

Also gives errors if trying to define a method or property that
already exists on the environment.
Add tagged and taggedSum

The `tagged` function allows creation of constructors that are tagged
so `instanceof` will work on instances. Also checks that the correct
number of arguments arguments are given.

The `taggedSum` function allows creation of multiple tagged
constructors at once and gives them a catamorphism.

Warning: using taggedSum's catamorphism currently relies on
enumerating properties on an object in the order that they were
defined. This is not defined according to the ECMAScript
specification. Another solution needs to be used.
Add functionName and functionLength

bibly can't override the .name and .length properties on instances of
Function. It needs to create new properties of ._name and ._length and
use them, when possible. This functions abstract away the usage of
those.
Add a flip function