Use function

Add a way to change submodels on the fly, by passing routing function to use().

Usage example:

```javascript
var ContenModels = {
    signedData: SignedData,
    envelopedData: EnvelopedData
};

var ContentInfo = asn1.define('ContentInfo', function() {
    this.seq().obj(
        this.key('contentType').objid(PKCS7_CONTENT_TYPES),
        this.key('content').optional().explicit(0).use(function () {
            return ContenModels[this.contentType];
       })
    );
});
```
This code doesn't work when implicit tag is set. With both use() and impicit() in place we would try to encode here and try one more time on line 511.

Code at line 511 would fail because content variable is null for this codepath.