Basic adsi support for extapi

### Rationale
ADSI support was missing, it was needed, so now it's not missing!

This PR starts the basics of the ADSI support for Meterpreter. It lives in the `ext_server_extapi` module. The current code supports the ability to run generic queries. Features include

* `adsi_computer_enum` - enumerates all the computers in the domain.
* `adsi_user_enum` - enumerates all the users in the domain.
* `adsi_domain_query` - generic query engine that can be used for ad-hoc queries.

These things are not set in stone, but are intended to be an example of what we can do. More work needs to be done here to make the default queries useful.

Values are pulled straight from AD and rendered, so things such as dates (which are stored as obscure-formatted integers) are just rendered as such. MSF will need to, over time, add support for pulling these bits of information apart.

### Requirements
* The `ext_server_extapi` module is required to be merged before this can be merged.
* The [Meterpreter](https://github.com/rapid7/meterpreter/pull/60) side of this PR needs to be merged.

### Validation
I have done testing on my only domain which is running Win2k. I would love for some other folks to get into this and try it out on a more up to date domain with more objects. So Windows 2k and Windows XP appear to work fine for me.

- [x] Works on x86
- [ ] Works on x64
- [x] Works on more than just a few versions of Windows & SP levels.

### Sample output
Updated user command
```
meterpreter > adsi_user_enum

Usage: adsi_user_enum <domain> [-h] [-m maxresults] [-p pagesize]

Enumerate the users on the target domain.

Enumeration returns information such as the user name, SAM account name, locked
status, desc, and comment.

OPTIONS:

    -h        Help banner
    -m <opt>  Maximum results to return.
    -p <opt>  Result set page size.

meterpreter > adsi_user_enum windows.old

windows.old Objects
===================

samaccountname  name            distinguishedname                                 description                                                                              comment
--------------  ----            -----------------                                 -----------                                                                              -------
Administrator   Administrator   CN=Administrator,CN=Users,DC=windows,DC=old       Built-in account for administering the computer/domain                                   
Guest           Guest           CN=Guest,CN=Users,DC=windows,DC=old               Built-in account for guest access to the computer/domain                                 
IUSR_WIN2K      IUSR_WIN2K      CN=IUSR_WIN2K,CN=Users,DC=windows,DC=old          Built-in account for anonymous access to Internet Information Services                   Built-in account for anonymous access to Internet Information Services
IWAM_WIN2K      IWAM_WIN2K      CN=IWAM_WIN2K,CN=Users,DC=windows,DC=old          Built-in account for Internet Information Services to start out of process applications  Built-in account for Internet Information Services to start out of process applications
SCHMIDT$        schmidt         CN=schmidt,CN=Computers,DC=windows,DC=old         test PC                                                                                  
TsInternetUser  TsInternetUser  CN=TsInternetUser,CN=Users,DC=windows,DC=old      This user account is used by Terminal Services.                                          
WIN2K$          WIN2K           CN=WIN2K,OU=Domain Controllers,DC=windows,DC=old  This is a TEST.                                                                          
alice           Alice           CN=Alice,CN=Users,DC=windows,DC=old                                                                                                        
bob             BOB             CN=BOB,CN=Users,DC=windows,DC=old                                                                                                          
fido            fido            CN=fido,CN=Users,DC=windows,DC=old                                                                                                         
krbtgt          krbtgt          CN=krbtgt,CN=Users,DC=windows,DC=old              Key Distribution Center Service Account                                                  

Total objects: 11

meterpreter > adsi_user_enum windows.old -p 5

windows.old Objects
===================

samaccountname  name            distinguishedname                                 description                                                                              comment
--------------  ----            -----------------                                 -----------                                                                              -------
Administrator   Administrator   CN=Administrator,CN=Users,DC=windows,DC=old       Built-in account for administering the computer/domain                                   
Guest           Guest           CN=Guest,CN=Users,DC=windows,DC=old               Built-in account for guest access to the computer/domain                                 
IUSR_WIN2K      IUSR_WIN2K      CN=IUSR_WIN2K,CN=Users,DC=windows,DC=old          Built-in account for anonymous access to Internet Information Services                   Built-in account for anonymous access to Internet Information Services
IWAM_WIN2K      IWAM_WIN2K      CN=IWAM_WIN2K,CN=Users,DC=windows,DC=old          Built-in account for Internet Information Services to start out of process applications  Built-in account for Internet Information Services to start out of process applications
SCHMIDT$        schmidt         CN=schmidt,CN=Computers,DC=windows,DC=old         test PC                                                                                  
TsInternetUser  TsInternetUser  CN=TsInternetUser,CN=Users,DC=windows,DC=old      This user account is used by Terminal Services.                                          
WIN2K$          WIN2K           CN=WIN2K,OU=Domain Controllers,DC=windows,DC=old  This is a TEST.                                                                          
alice           Alice           CN=Alice,CN=Users,DC=windows,DC=old                                                                                                        
bob             BOB             CN=BOB,CN=Users,DC=windows,DC=old                                                                                                          
fido            fido            CN=fido,CN=Users,DC=windows,DC=old                                                                                                         
krbtgt          krbtgt          CN=krbtgt,CN=Users,DC=windows,DC=old              Key Distribution Center Service Account                                                  

Total objects: 11

meterpreter > adsi_user_enum windows.old -p 5 -m 3

windows.old Objects
===================

samaccountname  name            distinguishedname                             description                                               comment
--------------  ----            -----------------                             -----------                                               -------
Administrator   Administrator   CN=Administrator,CN=Users,DC=windows,DC=old   Built-in account for administering the computer/domain    
Guest           Guest           CN=Guest,CN=Users,DC=windows,DC=old           Built-in account for guest access to the computer/domain  
TsInternetUser  TsInternetUser  CN=TsInternetUser,CN=Users,DC=windows,DC=old  This user account is used by Terminal Services.           

Total objects: 3
```

Updated computer command
```
meterpreter > adsi_computer_enum 

Usage: adsi_computer_enum <domain> [-h] [-m maxresults] [-p pagesize]

Enumerate the computers on the target domain.

Enumeration returns information such as the computer name, desc, and comment.

OPTIONS:

    -h        Help banner
    -m <opt>  Maximum results to return.
    -p <opt>  Result set page size.

meterpreter > adsi_computer_enum windows.old

windows.old Objects
===================

name     distinguishedname                                 description      comment
----     -----------------                                 -----------      -------
WIN2K    CN=WIN2K,OU=Domain Controllers,DC=windows,DC=old  This is a TEST.  
schmidt  CN=schmidt,CN=Computers,DC=windows,DC=old         test PC          

Total objects: 2

meterpreter > adsi_computer_enum windows.old -p 1

windows.old Objects
===================

name     distinguishedname                                 description      comment
----     -----------------                                 -----------      -------
WIN2K    CN=WIN2K,OU=Domain Controllers,DC=windows,DC=old  This is a TEST.  
schmidt  CN=schmidt,CN=Computers,DC=windows,DC=old         test PC          

Total objects: 2

meterpreter > adsi_computer_enum windows.old -p 1 -m 1

windows.old Objects
===================

name     distinguishedname                          description  comment
----     -----------------                          -----------  -------
schmidt  CN=schmidt,CN=Computers,DC=windows,DC=old  test PC      

Total objects: 1
```

Updated query command
```
meterpreter > adsi_domain_query 

Usage: adsi_domain_query <domain> <filter> <field 1> [field 2 [field ..]] [-h] [-m maxresults] [-p pagesize]

Enumerate the objects on the target domain.

Enumeration returns the set of fields that are specified.

OPTIONS:

    -h        Help banner
    -m <opt>  Maximum results to return.
    -p <opt>  Result set page size.

meterpreter > adsi_domain_query windows.old "(name=a*)" name distinguishedname

windows.old Objects
===================

name                distinguishedname
----                -----------------
Account Operators   CN=Account Operators,CN=Builtin,DC=windows,DC=old
AdminSDHolder       CN=AdminSDHolder,CN=System,DC=windows,DC=old
Administrator       CN=Administrator,CN=Users,DC=windows,DC=old
Administrators      CN=Administrators,CN=Builtin,DC=windows,DC=old
Alice               CN=Alice,CN=Users,DC=windows,DC=old
AppCategories       CN=AppCategories,CN=Default Domain Policy,CN=System,DC=windows,DC=old
a.root-servers.net  DC=a.root-servers.net,DC=RootDNSServers,CN=MicrosoftDNS,CN=System,DC=windows,DC=old

Total objects: 7

meterpreter > adsi_domain_query windows.old "(name=a*)" name distinguishedname -p 3

windows.old Objects
===================

name                distinguishedname
----                -----------------
Account Operators   CN=Account Operators,CN=Builtin,DC=windows,DC=old
AdminSDHolder       CN=AdminSDHolder,CN=System,DC=windows,DC=old
Administrator       CN=Administrator,CN=Users,DC=windows,DC=old
Administrators      CN=Administrators,CN=Builtin,DC=windows,DC=old
Alice               CN=Alice,CN=Users,DC=windows,DC=old
AppCategories       CN=AppCategories,CN=Default Domain Policy,CN=System,DC=windows,DC=old
a.root-servers.net  DC=a.root-servers.net,DC=RootDNSServers,CN=MicrosoftDNS,CN=System,DC=windows,DC=old

Total objects: 7

meterpreter > adsi_domain_query windows.old "(name=a*)" name distinguishedname -p 3 -m 4

windows.old Objects
===================

name                distinguishedname
----                -----------------
Account Operators   CN=Account Operators,CN=Builtin,DC=windows,DC=old
Administrator       CN=Administrator,CN=Users,DC=windows,DC=old
Administrators      CN=Administrators,CN=Builtin,DC=windows,DC=old
a.root-servers.net  DC=a.root-servers.net,DC=RootDNSServers,CN=MicrosoftDNS,CN=System,DC=windows,DC=old

Total objects: 4
```