Change .attr() and .at() interface to include defaultValue

- .attr() and .at() now behave as default lenses if provided second
argument
- use new low-level .makeAttrLens(name, resolver) and
.makeAtLens(i, resolver) to make a lens with custom resolver